- - PR -
phpの文字化け(¥マーク)
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-01-20 12:18
いつもお世話になっております。
tuchidaです。 現在以下の環境でphpを書いているのですが 入力した値をファイルに出力しているのですが、 所々に「¥」マークが入ってしまいます。 (特にURLの前後) この「¥」がでないようにしたいのですがよくわかりません。 どなたかご存知の方がいらっしゃればご教示いただきたいと思います。 よろしくお願いします。 OS SuSE Linux10.0 Apache2.0 PHP 4.4.0 <php.iniの内容> [mbstring] mbstring.language = Japanese mbstring.internal_encoding = Shift-JIS mbstring.http_input = auto mbstring.http_output = Shift-JIS mbstring.encoding_translation = Off mbstring.detect_order = auto mbstring.substitute_character = ""; mbstring.func_overload = 2 | ||||||||||||
|
投稿日時: 2008-01-20 13:05
magic_quotes_gpcの値を確認してください(おそらくTRUEだと思いますが)。
http://jp.php.net/manual/ja/ref.info.php#ini.magic-quotes-gpc サンプルにもあるように、フォームから受け取ったままの状態でSQL文に書けるようにescapeされますが、普通は「そのままDBに入れる」ことはないので、無駄といえば無駄ですが・・。 今は(逆に)get_magic_quotes_gpc()がTRUEだったら、stripslashes()を通す・・というのが基本だと思います。確認画面を挟むことが多いですし。DBに入れるときは自前でescapeしますね。addslashes()とか(MySQLだったら)mysql_real_escape_stringとか。 (蛇足) mbstring.internal_encodingでShift-JISって使いにくくないですか?リテラルを書くのにも気を遣わないといけないですよね。 [ メッセージ編集済み 編集者: shimix 編集日時 2008-01-20 13:05 ] | ||||||||||||
|
投稿日時: 2008-01-20 14:14
調べてみましたが、ちょっと... (あくまで、SuSELinux10.0のでインストールしたままです) magic_quotes_gpc = On となっています。?
記載もれですみません。 POSTするときは以下の行です。 $nextForm = stripslashes($_POST["NextForm"]); 上記の状態でも¥マークが入ってしまいました。
PHP初心者なため、viでじか書きしていますが、UpLoadしたものを見るときにちょっとつらいです。 | ||||||||||||
|
投稿日時: 2008-01-20 19:01
なっているということですね?(何故疑問符が・・)
「POSTするとき」っていつのことでしょう?「ファイルに書き出し」ているんですよね?ファイルに書き出したあとのタイミングで$_POST["NextForm"]と$nextFormをprintしてみてください。 で、ファイルに書き出しているのが間違いなく$nextFormかどうかも再確認してください。 ちなみにphpの変数名は大文字・小文字を区別しますので "NextForm" / $nextForm なんて命名はちょっと怖いです・・。
いや、そういう問題でもないんですが(汗)。わざわざ非推奨の文字コードを使うのは何故かなと。 [ メッセージ編集済み 編集者: shimix 編集日時 2008-01-20 19:05 ] | ||||||||||||
|
投稿日時: 2008-01-20 21:29
お世話になっております。
tuchiadです。
このプログラムを呼ぶ前の画面で複数行のテキスト入力項目がありこの名前が「NextForm」です。 この入力結果をPOSTするときのコードを書いたつもりでした。 (説明が足りなくてすみません)
勉強不足で叱られそうですが、Telnet(TeraTerm)で接続して中身を確認すると 漢字の部分が化け化けでわかりません。 ダウンロードしてから確認すると¥マーク以外は問題ない状態です。 本来ならばここで判らなければ成らないのかとも思うのですが このときのコードが理解不足のためわかりません。
もともと設定してなかったのですがテストをしているうちに結果的に現在の指定になりました。 本来はShift−JIS以外の方がいいのでしょうが先に書いてしまったので 直せないでいます。 | ||||||||||||
|
投稿日時: 2008-01-20 23:00
いや、ですからファイルに書き出したあとのタイミングで$_POST["NextForm"]と$nextFormをprintしてみられたんでしょうか?その時点で$_POST["NextForm"]と$nextFormには「¥」が入っていましたか?
ということでしたが、この状態で$nextFormに「¥」があるとしたら、$_POST["NextForm"]は「¥¥」の状態ではないか・・ということを確認していただきたいのですが。 どういう作りになっているのかわかりませんが、よくあるのは実際のファイル書き出しの前の「確認画面」にhiddenで渡すときに$_POSTを(stripslashesせずに)そのまま渡してしまうというのがあります。foreachで$_POSTをLoop処理するだけになっていませんか? ・・っていうかそれは確認画面のhtmlソースを(ブラウザ側で)見ればわかることですよねぇ(汗 [ メッセージ編集済み 編集者: shimix 編集日時 2008-01-20 23:03 ] | ||||||||||||
|
投稿日時: 2008-01-20 23:57
お世話になっております。
肝心の所が抜けていて、大変すみません。
テキスト出力後でも¥マークが出ていました。 今回は単なる入力値なのでhiddenの項目ではありません。 また、一回だけの単純な$_POSTです。 ブラウザ側では他の文字はちゃんと表示(¥マークを出して)しています。 出来が悪く要領の悪い回答ばかりですみません。 お手数ばかりかけてすみません。 | ||||||||||||
|
投稿日時: 2008-01-21 01:52
ということは $nextForm = stripslashes($_POST["NextForm"]); これが処理されていて、なおかつ$_POST["NextForm"]と$nextFormに同じように(ここ大事)「¥」が混入している状態でしょうか? この文と、テキストファイルへの書き込み($nextFormを書き込んでいますよね?)以外で$nextFormを使っている箇所がないかソースを検索してみてください。 #$nextFormが見つかった行を全部提示していただいてもけっこうですが・・。 (蛇足) 過去のいくつかのスレッドで、解決したのかどうか不明なものが多いのですが、そのことについてはどうお考えですか? [ メッセージ編集済み 編集者: shimix 編集日時 2008-01-21 01:57 ] |