プロが教えるわが家の防犯対策術!

ある取得した文字をUTF-8に変更したいと考えています。
もともと取得している文字のエンコードをmb_detect_encodingで確認したところ、ASCIIでした。どのような文字コードでも、可能な限り対応できるよう以下のスクリプトを作成してみました。

$str = mb_convert_encoding($str, "UTF-8", "mb_detect_encoding($str)");

しかしスクリプトの後に、print mb_detect_encoding($str)
で確認したところASCIIのままで、変更することができませんでした。
エラーなどはありません。

PHP初心者のため、原因やミスなどがわかりません
皆様のご指導をいただければと存じます。よろしくお願いいたします。

A 回答 (2件)

mb_detect_encoding に渡している $strの内容はどんなものでしょうか?


対象を日本語に絞ったとして、
sjis, euc-jp, utf-8のいずれも ASCIIとは互換の部分がありますから
(厳密に言うとsjisはちょっと違いますが)、その互換部分だけが使われている
文字列を渡しても判定はASCIIになってしまうのではないでしょうか?

というかよっぽどの腐れブラウザでなければ、ページを記述しているのと
同じエンコーディングで投げてくれませんか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/07/26 14:01

> $str = mb_convert_encoding($str, "UTF-8", "mb_detect_encoding($str)");


なんでmb_detect_encoding($str)が""で囲まれているのですか?
プログラムではなく文字列として認識されると思いますが。

mb_detect_encoding()は、どんな文字列でも確実に判断出来ると言う感じではありません。なので、例えばフォームで送信させるような場合は判断用の文字列をhiddenで入ると確実になります。

この回答への補足

$str = mb_convert_encoding($str, "UTF-8);
だけで試したところ、やはりASCIIのままでした。

IMAP関数で取得した情報で、MAILBODY、SUBJECTともに変更することができませんでした。メールのエンコードは変えられないのでしょうか?

補足日時:2007/07/27 16:04
    • good
    • 0
この回答へのお礼

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

mb_detect_encodingとmb_convert_encodingをべつにして、後ほど試してみようと思います

お礼日時:2007/07/26 14:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!