ICEcoderでコーディング環境を作ってみた【5分でできるかな】(そのに)【解決しました】
2013/07/12:追記
ICEcoder作者の Matt Passさんが本エントリ見て修正してくれました。
ので、最新版を引けばUTF-8環境で問題なく使えるはずです。感謝ー。
Twitterすげぇ・・・と思わざるを得ない。
@fan_tail toUTF8noBOMに問題がある、はいfan_tail。私は次のように変更:if ($encType != "ASCII" && $encType != "UTF-8" && ...OK. を動作します。少なくとも修正 :-/
2013-07-12 01:37:12 via web to @fan_tail
続いちゃう罠。
ファイル開いて、保存して、試して・・・閉じて、開い・・・あれ?
謎のポップアップ。
「Your document doesn't appear to be in UTF-8 encoding so has been converted.」
・・・オマエのファイルUTF-8じゃねーから!変換しといたから!そんじゃーね!ってこと?
日本語部分が文字化けしとる・・・うぬぬぬぬぬぬ。
しょーがないにゃー。
使うの諦め・・・ない。諦めの悪いσ(^_^です。
文字コードの問題ってめんどくさいですよねー。
取りあえず↑のメッセージ出してるコード確認。grep。
で、lib/settings.phpにヒット。コードは↓。
// returns a UTF8 based string with any UFT8 BOM removed function toUTF8noBOM($string,$message) { // Attempt to detect encoding if (function_exists('mb_detect_encoding')) { $encType = mb_detect_encoding($string); // Get rid of any UTF-8 BOM $string = preg_replace('/\x{EF}\x{BB}\x{BF}/','',$string); // Test for any bad characters $teststring = $string; $teststringBroken = utf8_decode($teststring); $teststringConverted = iconv("UTF-8", "UTF-8//IGNORE", $teststringBroken); // If we have a matching length, UTF8 encode it if ($encType != "ASCII" && strlen($teststringConverted) == strlen($teststringBroken)) { $string = utf8_encode($string); if ($message) { echo "<script>top.ICEcoder.message('Your document doesn\'t appear to be in UTF-8 encoding so has been converted.');</script>"; } } } return $string; }
BOM切り飛ばしたUTF-8文字列を返す関数ですか・・・ふむー。
PHP全く分かってないσ(^_^になんたる仕打ち・・・。
ちょこちょこマニュアル参照。PHPって便利だねぇ。
mb_detect_encodingが悪さしてEUCとか返してるんじゃ…?
でも検出した文字コード関係なく処理続けてるし…。
とか考えてphp.iniのオプションを弄ってみたり。
こだわりもしがらみもないので、UTF-8で統一してしまえば解消するか?
というわけで/etc/php.iniを以下設定に変えてみる。
mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII
default_charset="UTF-8"
mbstring.input_encoding="UTF-8"
mbstring.internal_encoding="UTF-8"
mbstring.output_encoding="UTF-8"
mbstring.language="japanese"
ついでに/etc/httpd/conf/httpd.confも、
AddDefaultCharset UTF-8
を有効にして/etc/init.d/httpd restart
とりあえずこれでUTF-8ベースで処理されるはず・・・だがまだ化ける。
むしろ"nkf --guess *"でASCIIを返すファイルまでメッセージ出るようになった。ぐああ。
ここでふと。
どうせICEcoder以外で作成したファイル以外は読み込まないんだから、BOMなんかつかないんじゃないか、と。
試しにICEcoder上で適当なファイルを作って(中身は全角文字テキトウ)・・・ついでにBOM付きファイルも作ってみる。
uconv -f utf-8 -t utf-8 --add-signature test.txt > testbom.txt
あ、uconvコマンドなかったんでインストールしました。
yum install icu
んで両方のファイルをfileコマンドで確認。
file *.txt
test.txt: UTF-8 Unicode text
testbom.txt: UTF-8 Unicode (with BOM) text
うん、やっぱりBOMなしで作ってくれてます。切り飛ばしたいくらい憎い存在ですから当たり前か。
てことはこの関数自体が不要って事でいいかな?いいよね?
というわけでこの関数全部コメントアウト(return行だけ残した)したら・・・
動いた。
表示もできてる。開き直してもおk。
とりあえずこれでいいや!
ちゃんとデバッグできるようになったら恩返ししたいなぁ・・・と思いつつ。
ではー。