dポイントプレゼントキャンペーン実施中!

以下のphpを実行したところ、入力した文字によって文字化けしたりしなかったりします。
どなたか原因が分かる方がいらっしゃったら教えてください。
(見、一は化けない。上、実は化ける。)
phpはバージョン5.2.8を使用しています。
(コード)-----------------------
<html lang="ja">
<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
<head>
</head>
</body>
<?php
mb_language("Japanese");
mb_internal_encoding("UTF-8");
$org_text1 = "見";
$org_text2 = "上";
$org_text3 = "実";
$org_text4 = "一";
$telop_text1 = mb_convert_encoding($org_text1,'utf-8','ASCII, JIS, EUC-JP,SJIS');
$telop_text2 = mb_convert_encoding($org_text2,'utf-8','ASCII, JIS, EUC-JP,SJIS');
$telop_text3 = mb_convert_encoding($org_text3,'utf-8','ASCII, JIS, EUC-JP,SJIS');
$telop_text4 = mb_convert_encoding($org_text4,'utf-8','ASCII, JIS, EUC-JP,SJIS');
echo "telop_text1=";
echo $telop_text1;
echo "<br>";
echo "telop_text2=";
echo $telop_text2;
echo "<br>";
echo "telop_text3=";
echo $telop_text3;
echo "<br>";
echo "telop_text4=";
echo $telop_text4;
?>
</body>
</html>
(結果)-------------------------
telop_text1=見
telop_text2=
telop_text3=タ
telop_text4=一

A 回答 (3件)

http://www-ise3.ist.osaka-u.ac.jp/miura/?PHP%20G …
「PHP GET/POSTメソッドでの日本語の文字化け防止」
こちらの記事をお読みください。
サンプルの文字数が少ないと、UTF-8/EUCのあたりで誤検出します。
その記事の中の「文字化けを防止する方法 」という箇所のように設定する方法が一般的のようです。
    • good
    • 0
この回答へのお礼

おぉ!まさにこれっぽいです。
まさか文字によって認識されたりされなかったりするとは。

ご紹介いただいたURLを参考にプログラムを修正してみます。
ありがとうございました。

お礼日時:2009/09/11 00:05

autoじゃなくて省略でした。

省略でdetect_orderが参照されます。
環境のみでなんとかする場合はdetect_orderを適切な値にしておきます。
1.変換を行わない
2.入力のエンコーディングを制限する
3.使用するエンコーディングを優先検出する
4.誤検出率を下げる => 特定文字の使用や検出用文字数を増やす

フォーム絡みでいえば mbstring.http_input はオフにしておくべきかいな。
    • good
    • 0

$org_text2 = "上";


と書いた時点でその文字列は
内部文字コード(internal_encoding)になるわけですが
変換する意味あるのでしょうか?

あと第3引数はエンコーディング検出順序ですが、
先頭から優先となります。ASCIIを優先させる意図は??
例:eucJP-win,UTF-8,SJIS-win,jis もしくは auto
また、検出は完璧ではないです。

この回答への補足

ご回答ありがとうございます。

> 変換する意味あるのでしょうか?
本来のプログラムはフォームより入力された文字を読み込み、
utf-8 に変換しています。
フォームでの入力でも $org_text2 = "上"; としても
どちらも同じように見、一は化けない。上、実は化ける、といった
入力した文字によって文字化けしたりしなかったりといった弊害があります。
どちらも共通した原因と考え、質問しました。

>ASCIIを優先させる意図は??
autoでうまくいかなかったため、上記のようにしました。
autoはASCII,JIS,Shift_JIS,EUC-JP,SJIS" に展開されるので、
上記のようになっています(EUC-JPは記載忘れです、済みません)。

以上私に誤解がありましたらご指摘お願いします。

補足日時:2009/09/10 22:01
    • good
    • 0

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