PHPの文字エンコード周りについて質問です。文字列(UTF8・EUCJP・SJISなど一般的なサイトの文字コード全種類)をEUCに変換するだけなのですが、mb_detect_encodingなどで正確に検出できるのでしょうか。「文字コード検出に失敗することがある」などの説明を何度か目にしたんですがどの程度なんでしょうか。


またPHP標準の関数以外に文字コード検出&変換に優れたライブラリなどがございましたら、教えてください。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/04/15 10:30:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント35pt

変換元をauto指定にすると、原理的に誤判定する可能性があります。変換元は明示的に指定(SJIS, EUC-JP, UTF-8等々)した方が良いです。


過去には、変換元と変換先を明示指定しても、うまく変換しないバグがありました。これはmbstringのバグによるもので、詳細は「mb_convert_encoding/mb_detect_encoding について」をご覧ください。

このときに頻繁にバグ退治がなされたので、いまは大丈夫だと思います。

私はSJIS⇒UTF-8変換を頻繁に使っているのですが、PHP 4.4.4/5.2.4 では失敗したことはありません。


他の変換ライブラリもあると思いますが、移植性・継続性を考えると、純正のmbstringを使った方がいいと思います。

id:webrecdotjp

ありがとうございます。

参考になりました。!

2008/04/09 11:54:17
id:y-kawaz No.2

回答回数1422ベストアンサー獲得回数226

ポイント35pt

文字コード検出には完璧なものはありません。

問題が起きないようにするには基本的に自動認識は出来るだけ使わず文字コードを明示的に指定するべきです。

質問のケースですと、HTMLの文字コードをEUCにするということのようなのでContent-Typeヘッダやmetaタグからcharsetを取得してそれを使い文字コード変換を行うのが筋かと思います。

id:webrecdotjp

なるほど。大変ですが参考にさせてもらいます。

2008/04/09 11:54:18

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません