人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

●質問者: webrecdotjp
●カテゴリ:インターネット ウェブ制作
✍キーワード:EUC PHP SJIS エンコード サイト
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pahoo
●35ポイント

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


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

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

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


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

◎質問者からの返答

ありがとうございます。

参考になりました。!


2 ● y-kawaz
●35ポイント

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

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

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

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ