トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

PHP、SJIS で echo "ソ" するとエラー

[カテゴリ:PHP]
[カテゴリ:文字コード]

PHP、SJIS で echo "ソ" するとエラー(2007/10/04)

普段、S-JIS環境全く使わないんですが、興味本位で使ってみた時の話。

UTF-8環境なのでnkfでShift-jisに変換して
echo "ソ" やってみた。

$ echo "<?php echo 'ソ'; ?>" | nkf -Ws | php | nkf -Sw
Parse error: syntax error, unexpected $end in /home/goun/- on line 2

なんで?

念のためUTF-8で確認

$ echo "<?php echo 'ソ'; ?>" | php
ソ

おっけー

internal_encoding かな。

$ echo "<?php echo 'ソ'; ?>" | nkf -Ws | php -d mbstring.internal_encoding=Shift_JIS | nkf -Sw
Parse error: syntax error, unexpected $end in /home/goun/- on line 2

だめだ。

script_encodingってのか?

$ echo "<?php echo 'ソ'; ?>" | nkf -Ws | php -d mbstring.internal_encoding=Shift_JIS -d mbstring.script_encoding=Shift_JIS | nkf -Sw
Parse error: syntax error, unexpected $end in /home/goun/- on line 2

だめだ。

設定きいてるのか?

$ php -i -d mbstring.internal_encoding=Shift_JIS -d mbstring.script_encoding=Shift_JIS | grep Shift_JIS
mbstring.internal_encoding => Shift_JIS => Shift_JIS

script_encoding が設定されないってことが判明

--enable-zend-multibyte でコンパイルしたとき
mbstring.script_encoding が有効らしい。

で、今使ってるphpは
--enable-zend-multibyte が有効なのか調べたいが
方法がわからん。
phpinfo()で表示されてたような気はするんだが。。

まぁ、script_encoding が設定できないことから、
無効でコンパイルされてるんだろうと予測

以下参考にしました。

PHPの文字化けを本気で解決する - ぎじゅっやさん:
http://hain.jp/index.php/tech-j/2007/02/13/%EF%BC%B0%EF%BC%A8%EF%BC%B0%E3%81%AE%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91

2007/11/02追記

phpinfo()中に、mbstring.script_encoding の項目が無い
ってことは、--enable-zend-multibyte でコンパイルされてないってこと。

XAMPP for Windows のPHP
mbstring.internal_encoding SJIS
なのに、mbstring.script_encoding が無い
駄目じゃん。

sjisはやっぱり問題が多い。特にphpの場合は。

sjis 0x5c - Google 検索:
http://www.google.co.jp/search?hl=ja&rlz=1B3GGGL_jaJP217JP218&q=sjis+0x5c&btnG=%E6%A4%9C%E7%B4%A2&lr=

最終更新時間:2007年11月02日 22時50分59秒