[PHP-users 6272] Re: mb_convert_encoding() での JIS->EUC-JP変換
HAYAKAWA Hiroshi
php-users@php.gr.jp
Mon, 18 Mar 2002 22:18:47 +0900
早川@名古屋です。
on 02.3.18 3:11 PM, LastTom at lasttom@ra2.so-net.ne.jp wrote:
> 松川です。
>
>> そのプログラム中で文字コードを JIS -> EUC-JP に変換させる際に
>> mb_convert_encoding()を利用していますが、
>> 文字列中に円マーク(\)があるとそれ以降が切れてしまいます。
>
> 似たような処理を私も行っているのですが、そのような問題は起きておりませ
> ん。(また気付いていないだけかと思いましたが、無事処理されていました。^^;)
>
> \マーク以降切れているというのはどうやって確認したんですか?
> まさか、データベースに格納したものを、別のスクリプトで表示させブラウザで
> 確認しただけなんてのはないですよねぇ。:)
mb_convert_encoding()の直前直後で、
error_log()を使って指定ファイルに書き出して確認しました。
補足にはなりにくいですが、
mail()やmb_send_mail()で送ってみても、
mb_convert_encoding()の前後で同様の現象になりました。
(DBにINSERTする前にはaddslashes()しています)
* * *
その後のデバッグで、
「\マーク以降切れる」という現象の原因が、
コマンドライン版のPHPが参照するphp.iniファイルが
意図しないそれを参照していて、入力をSJISとして検出してました。
それを修正してmb_convert_encoding()の前後の文字コードが
それぞれJIS,EUCであることを確認しました。
(mb_detect_encoding()による)
しかし今度は全文は表示されるものの、
円マーク(\)が?マーク(?)になって表示されるという状況になりました。
設定関連のポカかなぁという気もするんですが、
ちょっと思いつかない状況です。
なにかまだ抜けてることがありますでしょうか?
php.iniのマルチバイト関連の設定は以下の通りです。
mbstring.internal_encoding = EUC-JP
;mbstring.http_input = auto
;mbstring.http_output = SJIS
mbstring.detect_order = auto
;mbstring.substitute_character = none;
以下はテストの文面の一例ですが、
この場合、1つ目の円マークはそのまま表示されますが、
2つ目・3つ目の円マークは?マークとして表示されてしまいます。
This is testmail.
\マークのテスト。
'シングル'
"ダブル"
\マークのテスト。
これはテストメールです。
\マークのテスト。
あいうえおかきくけこさしすせそたちつてと
-----
>>> With your dreaming, ☆彡 Hayakawa,Hiroshi <<<
>>> with your smile. ☆彡 hayakawa@sam.hi-ho.ne.jp <<<
>>> ☆彡 Nagoya,Aichi,JAPAN <<<