- 締切済み
文字コードを検出し、ほかのコードに変更するスクリプトについて
ある取得した文字をUTF-8に変更したいと考えています。 もともと取得している文字のエンコードをmb_detect_encodingで確認したところ、ASCIIでした。どのような文字コードでも、可能な限り対応できるよう以下のスクリプトを作成してみました。 $str = mb_convert_encoding($str, "UTF-8", "mb_detect_encoding($str)"); しかしスクリプトの後に、print mb_detect_encoding($str) で確認したところASCIIのままで、変更することができませんでした。 エラーなどはありません。 PHP初心者のため、原因やミスなどがわかりません 皆様のご指導をいただければと存じます。よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- taketan_mydns_jp
- ベストアンサー率58% (450/773)
> $str = mb_convert_encoding($str, "UTF-8", "mb_detect_encoding($str)"); なんでmb_detect_encoding($str)が""で囲まれているのですか? プログラムではなく文字列として認識されると思いますが。 mb_detect_encoding()は、どんな文字列でも確実に判断出来ると言う感じではありません。なので、例えばフォームで送信させるような場合は判断用の文字列をhiddenで入ると確実になります。
- sakusaker7
- ベストアンサー率62% (800/1280)
mb_detect_encoding に渡している $strの内容はどんなものでしょうか? 対象を日本語に絞ったとして、 sjis, euc-jp, utf-8のいずれも ASCIIとは互換の部分がありますから (厳密に言うとsjisはちょっと違いますが)、その互換部分だけが使われている 文字列を渡しても判定はASCIIになってしまうのではないでしょうか? というかよっぽどの腐れブラウザでなければ、ページを記述しているのと 同じエンコーディングで投げてくれませんか?
お礼
ご回答ありがとうございます。 $strで渡している内容は、imap関数で取得した、mailbodyの内容です。 なので、ブラウザでエンコーディング云々という作業をすることができません。
お礼
ご回答ありがとうございます mb_detect_encoding($str)を””で囲まなかった際にエラーを出してしまったため、””で囲みました。 mb_detect_encodingとmb_convert_encodingをべつにして、後ほど試してみようと思います
補足
$str = mb_convert_encoding($str, "UTF-8); だけで試したところ、やはりASCIIのままでした。 IMAP関数で取得した情報で、MAILBODY、SUBJECTともに変更することができませんでした。メールのエンコードは変えられないのでしょうか?