• 締切済み

文字コードを検出し、ほかのコードに変更するスクリプトについて

ある取得した文字をUTF-8に変更したいと考えています。 もともと取得している文字のエンコードをmb_detect_encodingで確認したところ、ASCIIでした。どのような文字コードでも、可能な限り対応できるよう以下のスクリプトを作成してみました。 $str = mb_convert_encoding($str, "UTF-8", "mb_detect_encoding($str)"); しかしスクリプトの後に、print mb_detect_encoding($str) で確認したところASCIIのままで、変更することができませんでした。 エラーなどはありません。 PHP初心者のため、原因やミスなどがわかりません 皆様のご指導をいただければと存じます。よろしくお願いいたします。

みんなの回答

回答No.2

> $str = mb_convert_encoding($str, "UTF-8", "mb_detect_encoding($str)"); なんでmb_detect_encoding($str)が""で囲まれているのですか? プログラムではなく文字列として認識されると思いますが。 mb_detect_encoding()は、どんな文字列でも確実に判断出来ると言う感じではありません。なので、例えばフォームで送信させるような場合は判断用の文字列をhiddenで入ると確実になります。

puzzleman
質問者

お礼

ご回答ありがとうございます mb_detect_encoding($str)を””で囲まなかった際にエラーを出してしまったため、””で囲みました。 mb_detect_encodingとmb_convert_encodingをべつにして、後ほど試してみようと思います

puzzleman
質問者

補足

$str = mb_convert_encoding($str, "UTF-8); だけで試したところ、やはりASCIIのままでした。 IMAP関数で取得した情報で、MAILBODY、SUBJECTともに変更することができませんでした。メールのエンコードは変えられないのでしょうか?

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

mb_detect_encoding に渡している $strの内容はどんなものでしょうか? 対象を日本語に絞ったとして、 sjis, euc-jp, utf-8のいずれも ASCIIとは互換の部分がありますから (厳密に言うとsjisはちょっと違いますが)、その互換部分だけが使われている 文字列を渡しても判定はASCIIになってしまうのではないでしょうか? というかよっぽどの腐れブラウザでなければ、ページを記述しているのと 同じエンコーディングで投げてくれませんか?

puzzleman
質問者

お礼

ご回答ありがとうございます。 $strで渡している内容は、imap関数で取得した、mailbodyの内容です。 なので、ブラウザでエンコーディング云々という作業をすることができません。

関連するQ&A