fillin機能を使うとギリシャ文字が化ける
今、表題の件で困っております。。。
google先生もあまりいいお答えもっていないようで。。。
症状や環境はこんな感じです。
symfonyは1.0.17
libxml2は2.6.26
→いくつかの箇所で報告されている数値参照文字に化ける問題は発生しない。
サイトの出力文字コードはUTF-8。
PHP.iniの文字コード関連設定は全てUTF-8にしている。
レスポンスヘッダも、metaタグでもUTF-8を指定している。
という状況で、fillin機能を有効にしているフォームで、
ギリシャ文字(α、β・・・)を送信して、バリデートを失敗させて、テキストボックスに入力値を戻そうとすると
文字が(±)などになっている。
PCでも携帯でも同じ現象だった。
どうやら、Unicodeで
U+03B1 → U+00B1
ってかんじで、0x300 だけずれてるっぽい。ギリシャ文字だけ。
(少なくとも現在確認とれているのは)
fillin機能を無効にすると、化けずにちゃんと表示される。
確認できたのはここまで。
どうしてfillin使うと、中でどう処理されるから文字化けするんだよ・・・ってとこのストーリーまでは解明できず。。。
fillinは鬼門なのか。。。orz
fillinがバックで使ってる、PHPのDom関数系の問題かと思って、簡単なスクリプト作ったが、そこでは大丈夫だった。。。
だとするとsymfony内、fillinの実装の問題か?
試したスクリプト:
- greek_chars.php
<?php echo '<pre>'; $doc = new DOMDocument(); $doc->load('greek_chars.html'); $out = $doc->saveXML(); echo $out; echo '</pre>'; ?>
- greek_chars.html
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>ギリシャ文字の文字化けテスト</title> </head> <body> αβγδε・・・中略・・・ιω<br /> </body> </html>
sfFillInFormFilter の中とか、sfFillInForm の中とか追ってみたけど、いまいちそれっぽいところがない。。。
symfony、結構いやなところでこういう落とし穴あるんだよなぁ(/_;)