以下の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=一
No.2ベストアンサー
- 回答日時:
「PHP GET/POSTメソッドでの日本語の文字化け防止」
こちらの記事をお読みください。
サンプルの文字数が少ないと、UTF-8/EUCのあたりで誤検出します。
その記事の中の「文字化けを防止する方法 」という箇所のように設定する方法が一般的のようです。
おぉ!まさにこれっぽいです。
まさか文字によって認識されたりされなかったりするとは。
ご紹介いただいたURLを参考にプログラムを修正してみます。
ありがとうございました。
No.3
- 回答日時:
autoじゃなくて省略でした。
省略でdetect_orderが参照されます。環境のみでなんとかする場合はdetect_orderを適切な値にしておきます。
1.変換を行わない
2.入力のエンコーディングを制限する
3.使用するエンコーディングを優先検出する
4.誤検出率を下げる => 特定文字の使用や検出用文字数を増やす
フォーム絡みでいえば mbstring.http_input はオフにしておくべきかいな。
No.1
- 回答日時:
$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は記載忘れです、済みません)。
以上私に誤解がありましたらご指摘お願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP php ログイン 1 2022/11/01 00:24
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHPプログラムの間違い 1 2022/10/06 14:33
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PHP php テーブルが作成できない 1 2022/11/17 23:41
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL Serverで文字コードUTF-8
-
文字化け変換方法
-
携帯サイトでの文字コード変更
-
文字化けしてメールが送信できない
-
VBAのコマンドボタンの文字列の...
-
メッセージボックスで1025文字...
-
エスケープ文字の復帰(¥r)と...
-
ソースコードの1行が長いとき...
-
文字の入力で横バー上段、中断...
-
全角括弧と全角読点の間隔を狭...
-
VBScriptである文字列に半角文...
-
Excel VBAからBeckyを起動して...
-
Excel関数「COUNTIF」で”文字”...
-
文字列の置換をCStringで(C++)
-
改行を読み飛ばす
-
C++で空Enterの入力を判...
-
ラベル(スタティックテキスト)...
-
半角文字と全角文字の判別の仕方
-
XmlTextWriterで改行、RichText...
-
改行コードの変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字化け変換方法
-
phpのメールフォームの完了画面...
-
SQL Serverで文字コードUTF-8
-
UTF8メールがLotus Notesで文字...
-
SJISで取得した半角カナをUTF-8...
-
mail()で送信したメールのタイ...
-
RSSを取得すると文字化けする。
-
includeファイルの文字コードに...
-
phpフォームで携帯へメール送信...
-
PHP+Postgres 「髙」が文字化け
-
廣のjis変換で文字化け
-
PostgreSQLからCSV形式でエクス...
-
メールのCCに複数のアドレスを...
-
小さいひらがな(っ、ょ、ぃ、ゃ...
-
ASCII文字列をEUCなどに変換し...
-
PHPmailerでの添付ファイルの文...
-
CGIを作っています。渡されて来...
-
mb_convert_encoding で 一部の...
-
SJIS→UTF-8変換後の文字化けに...
-
IMAP関数で取得した文字列の、...
おすすめ情報