チョコミントアイス

変な発見をしたので、ご教授頂ければと思うのですが、

PHPにて、リストの中からランダムに選んだ文字を出力する
というプログラムを作っていたところ、「結構」という文字を
リストの中に入れると、エラーが起こってしまいます。

例えば、

"お菓子","九州","英語","結構","回路"

とします。これだと、FTPでアップロードした後、
ブラウザで表示させるとエラーになってしまいます。
(Parse error: parse error, expecting `')'' in /home/httpd/vhosts/abc.com/subdomains/sub/httpdocs/test.php on line xxxというメッセージ)

そこで、「結構」という文字を「結局」に変えてみます。

"お菓子","九州","英語","結局","回路"

こうすると、なぜかエラーは出ず、正常にランダムで選んだ文字が
出力されるのです。


この原因は何でしょうか?
もし良かったら、お試し下さい。

A 回答 (3件)

有名なシフトJISの「5c問題」ですね



「構」の文字が「8D 5C」で構成されているため、5Cによって、
シングルクォーテーションがエスケープされています。

本質的な解決方法はシフトJISを使わないということしかありませんが
たとえばご利用になっているftpのオプションでおかしくなっている
可能性もあるので、バイナリーモードで転送するなどで対応ができるかも
しれません
    • good
    • 0
この回答へのお礼

お返事が遅くなり申し訳ございません・・・
5c問題という存在を初めて知り、勉強致しました。
文字コードをシフトJIS以外に設定する事で問題を回避できました。
ご回答ありがとうございました。

お礼日時:2009/04/13 05:27

構はShift JISのダメ文字のひとつですね


文字コード内部に 0x5C ('\')を含む文字はエスケープされるので文字化けしたりエラーの原因になったりします。
他にも'表'や'能'などがあります。

"結構\"
のように後ろに\を追加すると大丈夫です。
    • good
    • 0
この回答へのお礼

お返事が遅くなり申し訳ございません・・・
5c問題という存在を初めて知り、勉強致しました。
おっしゃる通り、文字コードをシフトJIS以外に設定する事で
問題を回避できました。
ご回答ありがとうございました。

お礼日時:2009/04/13 05:28

使っている文字コードとPHP環境はどういうようにしていますか?


手っ取り早いのは、文字コードをUTF-8にすれば直るでしょう。
    • good
    • 0
この回答へのお礼

お返事が遅くなり申し訳ございません・・・
5c問題という存在を初めて知り、勉強致しました。
おっしゃる通り、文字コードをシフトJIS以外に設定する事で
問題を回避できました。
ご回答ありがとうございました。

お礼日時:2009/04/13 05:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報