トップページphp
983コメント301KB

[PHP][フレームワーク]CodeIgniterスレ

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/04/27(金) 23:17:16ID:???
公式:http://www.codeigniter.com/
チュートリアル:http://codeigniter.com/tutorials/

ユーザガイド日本語訳:http://ci-user-guide-ja.nought-point-999.net/

小回りの利くフレームワークの話題をひとつ!
0715nobodyさん2009/10/24(土) 22:15:23ID:???
>>714
と言う事はcodeigniter本家からの
ダウンロード版では日本語を正しくメールできないという事???

もしそうなら、本当にダサ 何だそれって感じだ。
0716nobodyさん2009/10/24(土) 22:25:43ID:???
むしろ日本語メール正しく送信できるフレームワークがあるのかと
どのフレームワークも件名化けたりする
0717nobodyさん2009/10/24(土) 22:31:08ID:???
>>716
UTF-8で送信してもかい?

0718nobodyさん2009/10/24(土) 22:38:00ID:???
全部UTF8にすればいいだけで可能だな
0719nobodyさん2009/10/24(土) 22:54:19ID:TTN2cu8l
>>709
できました。
ありがとうございました。
0720nobodyさん2009/10/24(土) 22:57:13ID:TTN2cu8l
>>709
補足です。
できたんですが、データベースドライバが余計なことして
バイナリをエスケープ文字列にエンコードしてたので、
デコードして渡してやる必要がありました。
0721nobodyさん2009/10/25(日) 12:12:30ID:???
CakePHPと比べた場合CodeIgniterが勝る所と劣る所を調査中です。
ご協力を。。。

0722nobodyさん2009/10/25(日) 13:42:05ID:???
使うお前が人に聞かないと違いがわからないのなら
どっち使ってもいいんじゃないの
0723nobodyさん2009/10/25(日) 13:43:14ID:XqTgHkg+
>>721
> CakePHPと比べた場合CodeIgniterが

勝る所

速度
柔軟性
最小限の知識で開発を開始できる


劣る所

無理やり規則に従わせることができない。
0724nobodyさん2009/10/25(日) 13:51:58ID:???
>722
道が分からない時は人に聞くのが一番良いだろう
0725nobodyさん2009/10/25(日) 14:06:37ID:???
開発者なら自分で調べる力がないと駄目なんじゃないの?
道順は目的地にたどり着くこと自体が目的だろうけど、
違いを調べるってのは仕組みを理解すること自体が目的なんだし。
0726nobodyさん2009/10/25(日) 14:45:13ID:???
>>712
言語パック入れないと、CIのDBクラスのエラーメッセージ、Form_Validationのエラーメッセージ等が英語のままに
なる。CIのDBクラスを使わない(PearとかPDOとかO/Rマッパーを使う等)・Form_Validationを使わないなら言語パック
は全く関係ないはず。
というか、O/Rマッパー使い+Validationは自前クラス使用の私は言語パック入れずに使ってます。特に困ったことなし。

>>715
メールはそもそも言語パック入れても解決しなくない?

コントローラ内でmb_send_mail関数を使うか、mail関数をラップする自作ヘルパでも入れれば大丈夫。
application/librariesにphpmailerとか自作のメールクラスとか入れて使ってもいいし。
ちなみにPHPではCIの前にsymfonyとcakeを使ったことがあるけど、どちらも日本語メールはデフォルトの
メールの送り方では文字化けした。国産フレームワークじゃない限り期待しない方が良い。
0727nobodyさん2009/10/25(日) 15:29:15ID:???
>>726
多分その言語パック(パッチ)内でmailがmb_send_mailに変更になってたり
dateがstrfdateになってたりしてるんじゃ?

まあ自分で対処しても同じのはそのとおりだが
0728nobodyさん2009/10/25(日) 15:30:41ID:???
つかソースみろよって話だw
0729nobodyさん2009/10/25(日) 20:00:58ID:XqTgHkg+
ciを使ったdbアクセスについて質問です。
ランダムなレコードを得ようとして下記を実行すると
得られるレコードが毎回一定になってしまいます。

$this->db->query("select * from mytable order by random limit 1");


psqlのコマンドラインから直接sqlを打つとランダムな結果になります。
一回ごとにpsqlを抜けてもきちんと各回ごとにランダムになります。


ci経由でランダムにならないのがどういう理由かわからずに困っています。
ご教授ください。
0730nobodyさん2009/10/25(日) 21:00:58ID:???
>>729
DBの設定ファイルでcache_onがtrueからかも。まぁ試してないけど。
0731nobodyさん2009/10/26(月) 01:08:16ID:???
CodeIgniterで、テンプレートの一部分だけをキャッシュすることはできますか。
またもしできたとして、その一部分を表示するときにだけ必要なデータはどのように渡しますか。
つまり
<!-- ここからキャッシュ する-->?x2028;<?php foreach ($list as $x) { ?>
<p><?php echo $x; ?></p>
<?php } ?>?x2028;<!-- ここまで -->
というテンプレートの場合、表示するときには$listが必要ですが、キャッシュが効いているときは
$listは必要ないので、こういうときは$listを用意したくないんですけど、そんなややこしいことはできるでしょうか。

?x2028;
0732nobodyさん2009/10/26(月) 22:20:23ID:8gDLhYd4
>>730
ビンゴ!でした。
デフォルト設定のままにしてたので全く考えもしませんでした。
たすかりました。ありがとうございます。
0733nobodyさん2009/10/26(月) 23:34:34ID:???
>>731
出来ない、と思う
なので、おれは自作でコントローラ内で
キャッシュチェックして、必要があればHTML生成、なければキャッシュからって感じでやってる。
0734nobodyさん2009/10/27(火) 15:19:56ID:NhIspLrL
ARでPostgreSQLの配列に対する演算はできないのでしょうか.
具体的には↓こんな操作をしたいのですが,

SELECT * FROM mytable WHERE '{abc}' && hairetsu;

次の文ではうまくゆかないようです.

$this->db->get_where('mytable', array("'{abc}' &&", "hairetsu" ));

また,これに相当するようなARメソッドはマニュアルには書かれていないようです.
0735nobodyさん2009/10/27(火) 20:43:28ID:???
kohanaって言うのはどんなもんなんでしょうか?
日本語サイトを作るのに何か問題があるでしょうか?
codeigniterを使うか、kohanaを使うか迷っています。

0736nobodyさん2009/10/28(水) 09:57:15ID:yVI01h7O
>>734
自己解決しました。
get_whereでなく、単独のwhereを使えばよいようです。
0737nobodyさん2009/10/28(水) 10:31:55ID:???
>>735
kohanaいいよ。新しいだけあってかなり洗練されてる。
ただ3.0に関してはDocsが揃ってない。日本語に関しては全く問題なし。
0738nobodyさん2009/10/28(水) 13:37:17ID:???
kohanaはCIよりいいですか?
0739nobodyさん2009/10/29(木) 22:30:02ID:9YMY5qNb
皆さんは、テンプレートエンジンを使いますか?
使うとすればどんなのがいいのでしょう?
Ajaxはどうですか?
0740nobodyさん2009/10/29(木) 22:36:11ID:???
釣りだよね?
釣りだと言ってくれ
0741nobodyさん2009/10/29(木) 22:42:17ID:9YMY5qNb
書き方が悪かったようです。すみません。


テンプレートエンジンとAjaxライブラリはどんなのを使ってますか?
と書くべきでした。
SmartyとかPHPTALと組み合わせるというのは見つけたのですが
どんなもんなのかと思いまして。
Ajaxについてはあまりわかりませんでした。
0742nobodyさん2009/10/29(木) 22:55:25ID:???
テンプレートエンジンなんて今時あしかせにしかならんよ
0743nobodyさん2009/10/30(金) 00:30:08ID:p/L2o0l6
そーなんですか?
存在意義なし?
0744nobodyさん2009/10/30(金) 00:59:55ID:???
DreamWeaverとか今時はPHPとかJSPとかASPに対応してるし
どの言語にしたってテンプレートエンジンは流行ってないな
0745nobodyさん2009/10/30(金) 09:23:35ID:p/L2o0l6
CIと相性のいいAjax用のライブラリはないのですか?
0746nobodyさん2009/10/30(金) 10:23:31ID:???
客からの指示で、smarty必須ってなってる場合も多いんだよ。
0747nobodyさん2009/10/30(金) 10:25:30ID:???
自分で全部やれるなら楽だよな。
フレームワークが何だろうが、そんなの関係ないし。
0748nobodyさん2009/10/30(金) 11:44:13ID:+JS8PV0u
>>745
相性がいいかどうかわからんけど、Ajaxフレームワーク比較
ttp://journal.mycom.co.jp/news/2008/10/08/034/index.html
0749nobodyさん2009/10/30(金) 11:52:50ID:???
何がいいかの質問で、俺は客にテンプレート指定されてるとか答える意味が解らん
07507462009/10/30(金) 12:14:52ID:???
>>749
お前アホか?
>>742-744の流れに対するレスだよ。
0751nobodyさん2009/10/30(金) 12:27:07ID:???
smartyをAjaxライブラリに対する回答だと思うのはさすがに・・・
0752nobodyさん2009/10/30(金) 14:50:51ID:???
>>750
テンプレートエンジンを使うとすればどんなのがいいのでしょう?

使わないのがいいでしょう

客からの指示で、smarty必須ってなってる    ←意味不明
自分で全部やれるなら楽だよな         ←意味不明
(これから採用する人の話であってお前の客の話なんて知ったこっちゃない)
0753nobodyさん2009/10/30(金) 15:25:15ID:???
頭が悪いのがいるな。
0754nobodyさん2009/10/30(金) 15:27:02ID:???
わざわざ蒸し返すなや
誰が正当かなんてどうでもええねん
0755nobodyさん2009/10/30(金) 22:06:59ID:p/L2o0l6
要するにテンプレートエンジンは不要なのですね。

AjaxのほうはjQueryが軽量コンパクトを売りにしてて伸び盛りのようです。
同じく軽量コンパクトを売りにしてるCIとはベストマッチじゃないでしょうか。
0756nobodyさん2009/10/30(金) 22:11:18ID:???
必要かどうかは人それぞれだろ。
0757nobodyさん2009/10/30(金) 23:37:06ID:???
軽量コンパクトがいいのか高機能がいいのかも提示せずに
相性云々言われても困るんだけど
ぶっちゃけAjaxライブラリにとってはサーバサイドのアプリケションが
何で書かれてようが知ったこっちゃ無いんだし相性もクソも何もない
0758nobodyさん2009/10/31(土) 00:32:11ID:???
jQueryは軽量でもコンパクトでもない。
ありがちな操作を、最小のコード量で書く事に特化していて、かつ習得しやすいので普及率が高いだけ。
(そういう意味では、設計思想がPHPに近いのかもな、今思いついたが)
だから、jQueryに「できないこと」に手を出そうとすると非常に面倒になる。

それと、JavaScriptライブラリが軽量でコンパクトである事と、PHPフレームワークが軽量でコンパクトである事の関連性が良く分からない。
軽量フレームワークと軽量JSライブラリで、なんで「相性が良い」という結論になるんだ?
相性が悪いと言ってるわけじゃなく、単に論理展開、関係性が良く分からない。

つうか、ざっと簡単なアプリなり小物ライブラリでも作ってみりゃいいだろ。
机上の空論で初心者がライブラリの良し悪しを判別できるわけがない。
0759nobodyさん2009/10/31(土) 00:51:18ID:???
なんだか、ケチつけたいだけの輩が巣食ってるらしい。
0760nobodyさん2009/10/31(土) 01:07:41ID:???
そうだねjQueryがいいねとか嘘ついても仕方ないだろ
駄目なものは駄目と言うしかない
0761nobodyさん2009/10/31(土) 08:09:34ID:???
駄目なんて誰も書いてないだろ。
わけのわからん基準で良い悪いを決める話じゃないってことだろ?

あれだ、本質を理解した上で用途に合わせて判断しろっていう、
当たり前のことを行ってるだけだ。
0762nobodyさん2009/10/31(土) 09:42:56ID:RCXnHmtW
なるほど、jQueryはダメなのか。
どこがどうダメなんですか?


本質を理解した上で用途に合わせて判断ですか。
ご自身は本質を理解して判断されているのですね。すばらしい。
私には何が本質で何を基準に判断したらいいか皆目見当がつかないのですが
どんなところに注目すれば、本質を理解できるのでしょうか?
判断の基準は、例えばどんなところにおかれているのでしょうか?

0763nobodyさん2009/10/31(土) 09:55:01ID:???
>>762
>>758
0764nobodyさん2009/10/31(土) 10:41:20ID:???
jQueryでいいと思うよ。
というか、prototype.jsとの2択しか無い気がするが。
勉強するんだったら、このどっちかにしとくべき。
結局は、オープン系は何を使うにも主流どこに乗っとかないと
後々面倒だよ。スクラッチで作れるだけの力が無いのであれば。
0765nobodyさん2009/10/31(土) 13:52:37ID:???
で、GET使えるようになったの?
0766nobodyさん2009/10/31(土) 15:11:23ID:RCXnHmtW
>>764
参考になりました。
ありがとうございます。


>>765
jQueryはGET使えないの?

だとしてもCIはデフォルトでGETを使わないようになってるから
問題ないと思います。

07677582009/10/31(土) 17:33:58ID:???
>762
> どんなところに注目すれば、本質を理解できるのでしょうか?
何かができるものは、絶対に何かを犠牲にしている、という点。
俺の書き込みが「jQueryはダメ」に見えたのなら、それはお前の経験不足。俺はjQuery信者だからな。
あと、理解したいならガタガタ抜かさずコード書け。

protojsとjQueryは併用できるしどっちかを選ぶようなものじゃないが、単独で込み入ったものを作るならprotojsが圧倒的に強い。
ただし>758でも書いたように、8割方のケースではjQueryのほうが圧倒的に早く作れる。
つまりどっちが向いているかは、どこまでをJSで処理し、どこからをサーバーサイドで処理するかによる。
0768nobodyさん2009/10/31(土) 20:31:41ID:???
>>766

>>765はCIの話だろう
0769nobodyさん2009/10/31(土) 20:41:12ID:RCXnHmtW
>>767
よくわかりました。ありがとうございます。
八割方のケースでjQueryが早くできること、
込み入ったことはprotojsが向いていることがわかって助かりました。
まあ、GoogleがjQueryを採用しているらしいので、
できないことというのも相当特殊なものかもしれません。


あと、その、サーバサイドでやることが、CIで補完しやすいとは限らないということですね。
0770nobodyさん2009/10/31(土) 23:32:42ID:???
>>767
この手のが一番疲れる。ある程度はできるから。
0771nobodyさん2009/10/31(土) 23:50:09ID:???
>>768
CIではGETを使えるので、そこを問題にしていたとは気づきませんでした。
デフォルトではセキュリティ上の理由から使えないようにしてあると
初期設定のチュートリアルにかかれてます。
0772nobodyさん2009/11/01(日) 21:33:49ID:???
mootoolsも忘れないで

っていうかスレ違いなんだぜ
0773nobodyさん2009/11/02(月) 14:12:06ID:???
CIのGETの話題が出たので便乗させていただきます。

CodeIgniterの検索ページで、ページ送りするとき、検索条件をどうやって次のページに持っていってますか?
=PCサイトと携帯サイトの違いをうまく処理したいです。
(携帯サイトは作ったことがないので、これからチャレンジすることになります。)

・日本のガラパゴス携帯のサイトは、基本的にクッキー無しという前提で作る。
・ページ間の遷移で、何らかの方法でセッションIDを持たせる。
・セッションIDに基づいて、サーバー側でセッション情報を保持しておき、セッション情報の中に検索条件を持たせておく。
こんな感じでOKでしょうか?

それで問題は、CIでセッションIDをどこに持たせるのか?
(1) POSTの場合
・デフォルトのCI設定で問題なし

(2) GETの場合
(2-1)・GETをOKの設定に変更する。 →これだとCIのURLヘルパーが使えなくて嬉しくない?

(2-2)・base64方式で、検索条件をエンコードして、URLのセグメントに無理やり埋め込む →URLに使える文字列長は上限があるので限度がある。
ttp://sourceforge.jp/projects/codeigniter/lists/archive/users/2009-March/001786.html
ttp://support.microsoft.com/default.aspx?scid=kb;ja;208427
GET メソッドを使用する場合、最大文字数は 2,083 文字に制限されます (実際のパスも含めた文字数)。

(2-3)・hookを使って、GETをPOSTに入れてしまう。→何かセキュリティーを考慮しなきゃいけない?=独自のバリデーターを用意するとか?
ttp://www.ryuzee.com/contents/blog/734

今のところ(2-2)で対応できていますが、検索条件が多くなったらどうしよう…><
07747072009/11/02(月) 14:19:16ID:???
自己解決しました。
=CI1.7.2のマニュアルに説明がありました。

ttp://codeigniter.jp/user_guide_ja/database/active_record.html#chaining
メソッドの連結を使えば、複数のメソッドをつなぐのがシンプルになります。
Note: メソッドの連結はPHP5 でのみ動作します。

CIは、PHP5とPHP4の違いを吸収するような便利な機能が提供されてますね。
ttp://codeigniter.jp/user_guide_ja/helpers/compatibility_helper.html
互換性ヘルパファイルには、PHP 5でしか実装されていないネイティブな関数と定数を、PHP 4でも実行できるものが含まれています。
これを使うことでPHP 4にしか対応していないサーバー上のアプリケーションでも、PHP 5のネイティブ関数を使うことができるようになります。

WebサーバがPHP4だから助かるな〜
0775nobodyさん2009/11/02(月) 14:19:28ID:???
GETを有効にするに3票
0776nobodyさん2009/11/02(月) 14:24:46ID:???
>>741
CIには簡易のテンプレート機能が用意されてるから、それ使ってみれば?

ttp://codeigniter.jp/user_guide_ja/libraries/parser.html
テンプレートパーサクラスを使うと、ビューファイルに含まれる擬似変数を解析できます。
ビューページで純粋なPHPを使う方が少し早いので、CodeIgniterでは、このクラスを必ずしも 必要としません。しかし、PHPのコードで混乱してしまうデザイナーと一緒に仕事をしている場合、開発者の中には、テンプレートエンジンを使用したい人もいると思います。

ドリームウィーバーでHTMLが崩れなければ、Smartyは要らないよ(^^)v
0777nobodyさん2009/11/02(月) 22:26:52ID:???
GET使えないとか不便なんだよな。
別に禁止にしなくても・・・。
0778nobodyさん2009/11/02(月) 22:48:46ID:WSpfQV0j
>>777
デフォルトでオフなだけで禁止はされてないよ?
オフのままでもセグメントで指定できるから不便もないと思うけど。
0779nobodyさん2009/11/03(火) 03:12:02ID:???
?guid=onさえなければ、良い設計だと思うよ…
PC版のみのサイトなら安心して使える。

今、携帯対応するのにindex.phpの冒頭で$_GET['guid']がセットされていたらunsetする処理を
足して使ってる。我ながら情けないけど、他にうまい手段が見つからない。
0780nobodyさん2009/11/03(火) 12:01:34ID:???
スレ先を悩んだのですが、
Kohana をさくらで動かしている方がいそうなここで伺います。

さくらインターネットのマルチドメインでサブドメインの
ディレクトリを /home/myaccount/www/sub で指定しています。
( sub/ のように後ろに / は付けていません )

/home/myaccount/www/sub/index.html は
ttp://sub.example.com/ でちゃんと見えています。

ここに Kohana を入れて下記 mod_rewrite を設定しました。

$ cat /home/myaccount/www/sub/.htaccess
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule .* index.php/$0 [PT,L]
RewriteRule ^(.*)$ index.php/$1 [PT,L]

ttp://sub.example.com/index.php/test/ は正しく出るのですが、
ttp://sub.example.com/test/ では「No input file specified. 」と出てしまいます。

CI を真似て php.ini に cgi.fix_pathinfo=1 を設定しています。
CI では $config['uri_protocol'] = "PATH_INFO"; なんてあるらしいのですが、Kohana では見当たらず。

Kohana をさくらで動かしている方、アドバイスお願いします!
0781nobodyさん2009/11/03(火) 12:20:06ID:???
RewriteRule ^(.*)$ ./index.php/$1 [PT,L]
これでどうだろ
07827802009/11/03(火) 12:44:55ID:???
>>781
ありがとうございます。
やはり「No input file specified. 」です…。
07837802009/11/03(火) 12:57:34ID:???
いろいろと試行錯誤中です。
RewriteBase をコメントアウトさせると

The requested URL /sub/index.php/ranking/ was not found on this server.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

となりました。何かこれで分かる方とかいらっしゃいますか。

RewriteEngine On
#RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule .* index.php/$0 [PT,L]
#RewriteRule ^(.*)$ index.php/$1 [PT,L]
RewriteRule ^(.*)$ ./index.php/$1 [PT,L]
0784nobodyさん2009/11/03(火) 13:04:21ID:???
ttp://hero-kick.com/linux/entry-738.html
07857802009/11/03(火) 13:13:37ID:???
>>784
ありがとうございます。
blog を参考に

RewriteEngine On
RewriteBase /
RewriteCond $1 !^(index\.php|images|robots\.txt)
#RewriteRule ^(.*)$ ./index.php?/$1 [L]
RewriteRule ^(.*)$ /index.php?/$1 [L]

としたのですが、 /index.php?/ の ? があるためか
「Disallowed key characters in global data.」が出ます。

? を外すと、やはり「No input file specified. 」に…。
0786nobodyさん2009/11/03(火) 13:25:22ID:???
「Disallowed key characters in global data.」でいろいろググって
ttp://forum.kohanaphp.com/comments.php?DiscussionID=1723
を見つけました。

RewriteEngine On
RewriteBase /
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.+)$ /index.php?kohana_uri=$1 [L]

で一部表示!
「一部表示」というのは CSS や JavaScript のパスが解釈できていないため
デザインなどがガタガタなのです。とはいえ一歩前進です。
RewriteCond などを見直してみたいと思います。

いろいろとアドバイスをくれた皆様、本当にありがとうございます。

mod_rewrite は苦手なので試行錯誤をしていますので、
もし、こうだよ、とあれば引き続きよろしくお願いいたします。
07877802009/11/03(火) 13:45:23ID:???
さくらインターネットのマルチドメインのサブドメイン環境で、
/ で動かす mod_rewrite は下記でうまくいきました。

RewriteCond %{HTTP_HOST} sub\.example\.com
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ /index.php?kohana_uri=$1 [PT,L]

アドバイスを頂いた皆様には重ねてお礼申し上げます。
ありがとうございました。
0788nobodyさん2009/11/04(水) 09:25:44ID:qw3iX5XK
>>758
> jQueryは軽量でもコンパクトでもない。

ホームページ冒頭にかいてあるけど?

jQuery is a fast and concise Javascript library...


自己宣伝だから全面的に信じるべきとはいわないが
この宣伝は無根拠なわけでもない。

ケチつける前に勉強した方がいい。
07897732009/11/04(水) 14:30:18ID:???
>(2-2)・base64方式で、検索条件をエンコードして、URLのセグメントに無理やり埋め込む

追記です。
base64でエンコードした文字列のままだと、デフォルトのCIのURLで使えない文字が含まれてしまいます。

http://ja.wikipedia.org/wiki/Base64
Base64は、データを64種類の印字可能な英数字のみ
A?Z, a?z, 0? までの62文字と、記号2つ (+ , /) 、さらにパディング(余った部分を詰める)のための記号として = が用いられる。

CI → $config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';
なので、base64の「+」「/」「=」をそれぞれ「-」「_」「:」等に置換すれば、CIのURLのセグメントとして使えます。=URLのセグメントをGETとして利用可能

(例)CI用にカスタマイズしたBASE64(ヘルパー関数に配置)
if ( ! function_exists('my_base64_encode'))
{
 function my_base64_encode($str)
 {
  $str = base64_encode($str);
  $str = str_replace('+', '-', $str);
  $str = str_replace('/', '_', $str);
  $str = str_replace('=', ':', $str);
  return $str;
 }
}

これと同様にデコードする関数を用意すればOK
0790nobodyさん2009/11/04(水) 18:22:08ID:???
>>789
普通にURLエンコードじゃなんでダメなの?

検索条件の保持は、検索条件内容をDBにぶちこんで、そのIDを連れ回す方がしっくり来ると思う。
CIのフォーラムでもそんな感じだったと思った。
07917892009/11/04(水) 20:23:11ID:???
>>790 アドバイスありがとうございます。

↓BASE64でエンコードする方法を参考にしてみたのですが、URLエンコードも試してみようと思います。
http://sourceforge.jp/projects/codeigniter/lists/archive/users/2009-March/001786.html

http://ja.wikipedia.org/wiki/URL%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89
URIにASCIIの非予約文字以外の文字データを用いる場合には、「%xx」(xxは16進数)という形でコードを表記する
スペースを含む記号(=,&,%,+)は使用できないので「%20」などのASCIIコードの16進表記に置き換えられる。
スペースは JavaScript の場合には %20 に変換されるが、CGIでは + に変換される。

URLエンコード後の文字列に「+」が現れる場合は、$config['permitted_uri_chars']に「+」を追加すればOKですね。その方が手軽でしたorz
07927892009/11/05(木) 13:06:07ID:???
>>790
urlencode方式でうまくいきました。ありがとうございました。

・FireFoxで見ると、エンコード後の文字列データは、日本語の場合、日本語のままでURLに表示されました。

ttp://pricewave.blog110.fc2.com/blog-entry-26.html を参考にして、
$config['permitted_uri_chars'] = '一-龠ぁ-んァ-ヴーa-zA-Z0-9a-z 0-9~%.:_-';

・エンコードする文字列に半角スペースがある場合
urlencodeで半角スペースが「+」に置換されて、CI1.7.2でエラーになりました。

$config['permitted_uri_chars']に「+」を追加してOK = ★追加する位置★に注意

(1) $config['permitted_uri_chars'] = '一-龠ぁ-んァ-ヴーa-zA-Z0-9a-z 0-9~%.:_-+'; // 末尾に「+」を追加
↓エラーになる
Message: Compilation failed: range out of order in character class at offset 63
Filename: libraries/URI.php
Line Number: 191

Message: Cannot modify header information - headers already sent by (output started at /home/mobilebest/usedbest.net/script/CodeIgniter/system/libraries/Exceptions.php:166)
Filename: codeigniter/Common.php
Line Number: 356

An Error Was Encountered
The URI you submitted has disallowed characters.

(2) $config['permitted_uri_chars'] = '一-龠ぁ-んァ-ヴーa-zA-Z0-9a-z 0-9~%.:_+-'; // 末尾じゃない場所に「+」を追加
=これだと、文字列に半角スペースが入っていてもOKでした。
0793nobodyさん2009/11/06(金) 17:05:09ID:u54flEvH
CIのEmailライブラリを使ってメールを送信しているのですが、本文が文字化けしていまいます。

なので、 MY_Email クラスを作り mail()関数を mb_send_mail() にして、
mb_language("ja"), mb_internal_encoding('UTF-8') を記述して送信すると、今度は題名が文字化けしていまいます。

ソースはUTF-8で、Emailの"charset"設定は ISO-2022-JP にしています。


エスパーさせて申し訳ありませんが、どなたかスマートな解決法をご教授くださいm(__)m
0794nobodyさん2009/11/06(金) 17:40:13ID:???
>>793
qdmail使えば幸せになれるよ
0795nobodyさん2009/11/06(金) 18:09:30ID:u54flEvH
>>794
レスありがとうございます。
現在Postfixが使われています。
しかし、メールサーバーの変更は事情によりできないので、別の対処法をご存知でしたら教えて頂けると幸いです。
0796nobodyさん2009/11/06(金) 18:14:39ID:u54flEvH
スミマセン、qdmail を qmail と見間違っていました

CIのライブラリに qdmail をぶち込んで使ってみることにします。
情報ありがとうございました!
0797nobodyさん2009/11/09(月) 13:46:17ID:???
>>793

$config['charset'] = 'iso-2022-jp';

$subject = mb_convert_encoding($subject, 'iso-2022-jp', 'utf-8');
$this->email->subject($subject);

$message = mb_convert_encoding($message, 'iso-2022-jp', 'utf-8');
$this->email->message($message);
$this->email->send();

で大丈夫だよ。
0798nobodyさん2009/11/10(火) 21:00:29ID:???
>>797
おいおい。Subjectそのままで送るのか?
MIMEエンコードしろよ
0799nobodyさん2009/11/11(水) 10:32:59ID:???
>>798
と思う前にやってみろ。
0800nobodyさん2009/11/12(木) 10:48:35ID:???
>>799
ハア?
既にやってんだが
無知は黙ってろks
0801nobodyさん2009/11/12(木) 10:59:46ID:???
>>800
797のコードだとCIのEmailクラス通すからMIMEエンコードはやってくれるんじゃないの?
0802nobodyさん2009/11/12(木) 11:48:00ID:???
質問です.

現在ヘルパ関数を自作していて,ヘルパ関数内でセッションクラスを使いたいと考えています.
しかし,$this->session->userdata('hoge')のように書くとエラーになります.

どのようにすればヘルパ関数内でセッションクラスを使えるのでしょうか?
0803nobodyさん2009/11/12(木) 12:00:12ID:???
>>800
2重にエンコーディングされなかったか?Email.php使うと。
0804nobodyさん2009/11/12(木) 12:25:12ID:???
>>802
$CI =& get_instance();
$CI->session->userdata('hoge');
でどうでしょ
08058022009/11/12(木) 12:58:15ID:???
>>804
ありがとうございます.
使えるようになりました.
0806nobodyさん2009/11/13(金) 01:38:44ID:RfEeqTfm
テスト
08077932009/11/16(月) 12:24:50ID:???
規制に巻き込まれてしまい返信できずスミマセン。

>>797
レスありがとうございます。
そのやり方は質問をする前に確かめたのですが、本文の一部に文字化けがみられました。

で、あれからずっと調べていたのですが
http://blog.livedoor.jp/lax34volvic/archives/1062690.html
ここにある問題(特定の文字「目」や「本」などが文字化けする)と同じようです。
メール本文に「本メール」という単語があり、その行が見事に文字化けしていたのです。

現在はEmailクラスを拡張して使っていますが、他にやりようがあるなら教えてください。
0808nobodyさん2009/11/16(月) 13:06:14ID:???
Qdmail使ったら。ソースコード汚くて萎えるけど。
08097932009/11/16(月) 17:22:18ID:???
>>808
qdmailは上記で教えてもらった時に使ってみました。
が、せっかくCIにEmailの処理があるのにそれが使えないのはおかしいので調べていた次第であります。

現在、MY_Emailクラスを作り
function subject() の $subject = $this->_prep_q_encoding($subject); の記述を除去。
mail()が使われているところをmb_send_mail()に変更しています。
(CIのversionは1.7.2です)

これで大丈夫なのか今はそれだけが不安です。(特にsubject()の>_prep_q_encoding()を使わなくてもいいのか辺り)
0810nobodyさん2009/11/16(月) 18:03:26ID:???
>>809
俺も大方そんなところだよ。
_prep_q_encodingなんて気持ち悪い物も、ムリに使う必要は無いと思う。
mb_send_mailは信用してないから、mailを使ってるけど。

というか、これ以上はスレチな気もするので。
http://pc11.2ch.net/test/read.cgi/php/1249778720
0811nobodyさん2009/12/01(火) 16:52:40ID:n2Un74VI
しかしスレが落ちそうな勢いだな。

みんなまだこれ使ってる?
0812nobodyさん2009/12/01(火) 16:57:48ID:???
使ってるよー
djangoも使ってるし、どっちもスレは過疎化
FW使うような人はある程度知識がすでにあるから聞くことないんだろね
0813nobodyさん2009/12/01(火) 17:01:55ID:???
同じく使ってるよ。でも最近はKohana。
PHP5使っているならCIじゃなくてKohanaお勧め。
0814nobodyさん2009/12/04(金) 22:00:44ID:???
pre_controller
コントローラが呼ばれる直前に呼ばれます。すべて基本クラスのロード、ルーティング、そしてセキュリティチェックが終わっています。

ってあるんですが、具体的にCIがやってるセキュリティチェックって何?
■ このスレッドは過去ログ倉庫に格納されています