• 締切済み

IMAP関数で取得した文字列の、文字コード変更について

IMAP関数で取得した文字列(MAILBODYやSUBJECTなど)の文字コードは変えられないのでしょうか? もともとの文字コードはASCIIであることは確認しているのですが、 $str=mb_convert_encoding($str,"UTF-8"); を行っても、ASCIIのまま変更することができません。 なにかコツのようなものをご存知でしたらお教え願えればと思います よろしくお願いします。

  • PHP
  • 回答数2
  • ありがとう数3

みんなの回答

回答No.2

ASCIIをmb_convert_encodingしても、detect_encodingした結果はASCIIになるんじゃないかと思います。 IMAP関数を使ったことが無いのですが、以下のページは参考にならないでしょうか? http://jp.php.net/manual/ja/function.imap-headerinfo.php http://jp.php.net/manual/ja/function.imap-body.php 実際に書かれているソースを公開した方が問題点が解るんじゃないかと思います。

puzzleman
質問者

お礼

お返事が遅くなりました。ご回答ありがとうございます。 ソースは以下です。 $_mail=imap_open ("$surver","$id","$pass"); $mailbody=imap_body($_mail,1); $mailbody=mb_convert_encoding($mailbody,"UTF-8"); print(mb_detect_encoding($mailbody); imap_close($_mail); です。ブラウザで確認したところ、エンコードはSJISになっておりました。しかしエンコード前・後共に、mb_detect_encodingで確認してもASCIIのままになってしまいます。

  • calltella
  • ベストアンサー率49% (317/635)
回答No.1

ASCIIだとわかっているのでしたら明示すべきです。 $str = mb_convert_encoding($str, "UTF-8", "ASCII");

puzzleman
質問者

お礼

ご回答ありがとうございます。 ご質問の前に、すでに明示して試しておりましたが、結果は変わりませんでした。

関連するQ&A

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

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

    • 締切済み
    • PHP
  • 文字列のエンコードについて

    例えば以下のコードで日本人がターゲットのサイトを作ったときにエンコードがutf8以外ってありますか?idなどもutf8でなんとかなるのになぜ他の文字コードは必要なのですか? //SJISに変換 $str = "私のidはrxxdtggb63332224667です。"; $result = mb_convert_encoding($str, "SJIS"); echo $result . "\n"; //UTF-8に変換 echo mb_convert_encoding($str, "UTF-8"); //SJISに変換 $str = "gcdddyyghgcc.jpg"; $result = mb_convert_encoding($str, "SJIS"); echo $result . "\n"; //UTF-8に変換 echo mb_convert_encoding($str, "UTF-8");

    • ベストアンサー
    • PHP
  • 文字コードの検出が正しいかを検証する方法

    PHPの mb_detect_encoding 関数を使っているのですが、 文字エンコーディングの検出が間違っていないかを検証する為に、 以下のように、検出された文字コードに戻し、元の文字列と一致するかで、 検出された文字エンコーディングが正しかったか確認しています。 $str = file_get_contents ( $url ); $moji_code = mb_detect_encoding ( $str , "ASCII,JIS,UTF-8,eucJP-win,SJIS-win" ); $str_after = mb_convert_encoding ( $str , 'UTF-8' , $moji_code ); if ( $str !== mb_convert_encoding ( $str_after , $moji_code , 'UTF-8' ) ) {     //文字化けしている可能性あり } これで、完璧でしょうか?

    • ベストアンサー
    • PHP
  • PHPの文字コード変換について

    PHPで mb_convert_encodingを用いて UTF-8で記述されたPHPスクリプトファイルの PHPファイル内の任意の文字列の文字コードを変換する場合、 $value = "文字列"; $str = mb_convert_encoding($value ,"UTF8","UTF8"); print $str; この場合、特に問題なく、変換がおこなわれます というか、意味のないで処理ではありますが。 次に $str = mb_convert_encoding($value,"EUC-JP","EUC-JP"); とした場合 うまく文字列の文字コードの変換がおこなわれず 出力内容は文字化けします。 次に $str = mb_convert_encoding($value,"SJIS","SJIS"); とした場合 EUC-JPと同じく文字コード変換に失敗し 文字化けするだろうとおもいましたが おもいのほかブラウザの文字コードUTF-8のままで文字化けしていないのです。 これはどういう現象でしょうか? たとえば一つ目は UTF8で記述されたPHPファイルの文字列をそのままUTF-8として 変換されせるのですから、問題ないはずです。結果問題ありません。 二つ目は UTF-8でかかれたPHPファイルの文字列をEUC-JPでかかれたファイルとして EUC-JPという文字コードに変換しなさいという命令ですよね? これは思う通りにいかなくて文字化けした文字列が出力されるのはわかるのですが 三つ目はUTF8で記述された文字列をSHIFT-JISとしてSHIFT-JISに変換しようとしているにも かかわらず、結果問題なくブラウザのUTF-8で文字列と表示されてしまいます。 これはいったいどういう事なのでしょうか? これが仮に $str = mb_convert_encoding($value,"SJIS","UTF-8"); なら話は簡単んです。 UTF-8で記述されたファイルの任意の文字列を UTF8からSJISに変換しようとしているのですから問題なく SHIFT-JISでエンコーディングされた文字列が帰ってくるはずです。 こ乃原因をご存知のかたよろしくご教授ください。 お願い致します。

    • ベストアンサー
    • PHP
  • ASCII文字列をEUCなどに変換したいができない

    いつもお世話になっております。 ファイルの文字コードがEUCのファイルの中に、 なぜか、文字コードがASCIIである文字列があります。 この文字列は、外部から受け取るカタチなので、 これはこれで、ASCIIでも、しかたないのかなという風に思い、 それならば、受け取った後、EUCに変換すればいいやと考え、 mb_convert_encoding($var,"EUC-JP","ASCII")を使って、変換を試みるも、 ASCIIのままなのです。 ASCIIである文字列には、変換されない鉄壁さというものがあるのでしょうか? 変換処理後に、mb_detect_encoding()で検査しますが、やはりASCIIのままです。 それならば!、ということで、 受け取る値(ここでは例として、"This_Value_is_ASCII_Encoding_hogehoge9999")を いったん手動のコピペ操作をして、 $UketoruAtai = "This_Value_is_ASCII_Encoding"; とし、 その値もやはり、ASCII文字列になっているので、 この、手動コピペ文字列ならば文字コードの変換はできるだろうと思い、 上記のmb_convert_encoding()の処理をしたわけですが、 この場合でも、やはり ASCIIは鉄壁でした。 いったい、これは、なんなんでしょうか、、、。 ちなみに、このASCII文字列は、英数字のみ(当たり前か。笑)の文字列です。 このASCII文字列を、EUC-JPにする手助けを、どなたか宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHPで受ける文字コードは何に依存する?

     例えばmb_convert_encoding()で変換するとき、元の文字コードは何に依存されるのでしょうか?  フォームで送る場合は、フォームページのHTMLのでmetaタグに指定されている文字コードになるんでしょうか?  charset=utf-8とmetaタグで指定されている場合、PHPのmb_convert_encoding()で受け取るときの変換前の文字コードはutf-8?  データをutf-8で扱いたいとき、フォームページをcharset=utf-8で作っておけば、mb_convert_encoding()でわざわざutf-8に変換するようにしておかなくても大丈夫ですか?

    • ベストアンサー
    • PHP
  • PHPでの文字列置換について

    こんにちは PHPにて丸カッコ内の文字列を取得しようとしています。 対象の文字列は、「坂(さか)」という文字列の全角丸カッコ「()」内になります。 正規表現でやればすぐに取得できるのかもしれませんが、正規表現の知識が無いため 力ずくでやってみようとしました。 そこで、「(」で文字列の位置を取得して…と考えて色々やったのですが、 この全角丸カッコ「(」が、mb_strposでも位置を検知できず、 全角丸カッコ「(」を半角にして対応してみようかとmb_ereg_replace('(','(','坂倉武史(さかくらたけし)');としようとしても、変換されず困っております。 ちなみに「坂(さか)」という文字列は、 ネット上のあるHTMLから、file_get_contentsでURLを指定してから 取得して、その文字コードがEUC-JPなので、 mb_convert_encoding($dataXML, "UTF-8", "EUC-JP"); で、UTF-8に変更しております。 文字コードの問題のかもしれませんが、答えがみつかりません。 1。正規表現で取得できるのであれば、正規表現の書き方をお教えいただけますでしょうか。 2。正規表現が難しいのであれば、力ずくでやるのでこの「(」全角丸カッコの始まりの検知方法をお教えいただけますでしょうか。 PHPの実行環境は、 PHP5.3 mbstring.language  japanese mbstring.internal_encoding  UTF-8 mbstring.encoding_translation  ON default_charset  UTF-8 UNIX 文字コード UTF-8 ソース文字コード UTF-8 です どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ファイルの文字コードを調べたい

    お世話になります。 現在PHPでテキストファイルの文字コードを調べる関数を作っています。 流れは 1 テキストファイルのパスをわたす 2 ファイルがあれば開いて最初の1行を読む 3 mb_detect_encoding関数でその文字列を調べて返す という順なのですが mb_detect_encodingで何をおくってもASCIIとしかならず 不思議に思い質問させていただきました もしかしてmb_detect_encodingには日本語を渡さないと autoの場合すべてASCIIで返ってくるのでしょうか? auto時の調べる順番がASCIIが一番上になっているためですか? また、ファイルの文字コードを調べるのにもっと良いほうほうがあれば 教えていただけないでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP+Postgres 「髙」が文字化け

    DB上に格納した文字列を取得し、PHPで出力すると、 「髙」(はしごだか)等、一部の文字が「□・」のような見た目に化けてしまいます。 環境は以下です。 Linux(CentOS 5) PHP 5.1.6 Apache 2.2.3 PostgreSQL 8.4.3 文字コードは以下です。 Postgres:EUC-JP PHPソース:EUC php.ini の[mbstring]はコメントのまま変更していません。 文字コードの変換を試してみたのですが、「髙」としては出力できませんでした。 Windows上では「CP51932」に変換すると正常に出力できましたが、Linux上ではやはり駄目でした。 mb_language("uni"); mb_internal_encoding("euc-jp"); mb_http_input("auto"); mb_http_output("euc-jp"); $str = "髙橋"; print(mb_convert_encoding($str, "EUCJP-win")); print(mb_convert_encoding($str, "EUCJP-win","EUC-JP")); print(mb_convert_encoding($str, "SJIS")); print(mb_convert_encoding($str, "SJIS","EUC-JP")); print(mb_convert_encoding($str, "SJIS-win")); print(mb_convert_encoding($str, "SJIS-win","EUC-JP")); print(mb_convert_encoding($str, "UTF-8")); print(mb_convert_encoding($str, "UTF-8","EUC-JP")); print(mb_convert_encoding($str, "EUC","SJIS")); print(mb_convert_encoding($str, "Unicode")); print(mb_convert_encoding($str, "Unicode","EUC-JP")); print(mb_convert_encoding($str, "UTF-8", "sjis-win")); print(mb_convert_encoding($str, "CP51932")); print(mb_convert_encoding($str, "MS932")); print(mb_convert_encoding($str, "MS932","EUC-JP")); print(mb_convert_encoding($str, "UTF-8","EUCJP-win")); print(mb_convert_encoding(mb_convert_encoding($str, "EUCJP-win" ), "UTF-8","EUCJP-win")); print(mb_convert_encoding(mb_convert_encoding($str, "EUCJP-win","EUC-JP"), "UTF-8","EUCJP-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win" ), "UTF-8","SJIS-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win","EUC-JP"), "UTF-8","SJIS-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win" ), "EUCJP-win","SJIS-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win","EUC-JP"), "EUCJP-win","SJIS-win")); http://blog.livedoor.jp/loopus/archives/50160285.html 上記サイトによると、解決法は「EUC-JPで出力しないこと」という事でしたが、 文字コードを変換して出力できるような事を書いているサイトもあり、結論が出せずにいます。 ソースを書き換えるのは避けたいのですが、いい方法がありましたらご教示ください。

    • ベストアンサー
    • PHP
  • mb_detect_encoding()関数について

    かなり初歩的な質問かもしれませんが、とあるサイトを参考に、以下のスクリプトを作って文字コードをEUC、 改行コードをLFにして保存し、実行しました。 <?php $str="PHP練習"; print mb_detect_encoding($str); ?> これを実行した結果は、 UTF-8でした。 てっきり保存した文字コードが出力されると思ったんですが違いました。ためしに今度は「$str="PHP練習";」の部分を「$str="PHP";」に してみたらASCIIと出力されました。 さらに今度は「mb_detect_encoding($str);」の部分を、 「mb_detect_encoding($str,"UTF-8");」にして実行したら、 UTF-8と出力されました。 「mb_detect_encoding($str,"SJIS");」にして実行したら、 SJISと出力されました。 あといろいろ$strの中の文字を変えたりしてみましたが、 たまに何も出力されないときもありました。 サイトの説明を見たら、「mb_detect_encoding()関数は、文字列のエンコーディング形式を検出します」と書いてありました。 この「文字列のエンコーディング形式」というのは何によって決まるのでしょうか?

    • 締切済み
    • PHP

専門家に質問してみよう