
PHPでのはしご高(髙)や立ち崎(﨑)などの機種依存文字の文字化けについてです。
まだ経験が浅いものですからアドバイスしていただけるとありがたいです。PHP関連で機種依存文字の文字化け解消方法をいろいろ調べ、大抵は文字コードをSJIS-winにすると治ったと書いてあり検証してみましたが・・・・結局うまくいきませんでした。試しに以下の通りフォームから受け取る値($_REQUEST)を確認してみると、機種依存文字「髙」だけの場合と、そうでない「野原」の場合はきちんと挙動しているのですが、「髙野」のように混ざったパターンをすると化けてしまいます。この段階で理由が分からずとまっています。説明不足とは思いますがどうかよろしくお願いします。
<?php
mb_convert_variables("SJIS-win", "SJIS-win,cp51932,UTF-8,JIS,ASCII,EUC-JP", $_REQUEST);
print_r ($_REQUEST);
?>
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body>
<br><br>
<FORM method="POST" action="<?=$PHP_SELF?>">
名前<INPUT size="25" type="text" style="ime-mode:active" name="name">
<INPUT type="submit" name="check" value=" 確認する">
</FOAM>
</body>
</html>
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
私の環境でやってみたら、問題なく表示できました。
php.ini の mbstring の項目を全部晒してもらった方が、特定しやすいかもしれません。
因みに私は、以下の設定で検証しています。
[ php.ini - mbstring ]
mbstring.detect_orderauto
mbstring.encoding_translationOff
mbstring.func_overload0
mbstring.http_inputauto
mbstring.http_outputpass
mbstring.internal_encodingUTF-8
mbstring.languageJapanese
mbstring.strict_detectionOff
mbstring.substitute_characterno value
[ test.php ]
<?php
ini_set('mbstring.http_input' , 'pass');
ini_set('default_charset' , 'SJIS-win');
ini_set('mbstring.internal_encoding' , 'SJIS-win');
ini_set('mbstring.http_output' , 'SJIS-win');
// 上記4行で、php.ini の設定を上書きしている
mb_convert_variables("SJIS-win", "SJIS-win,cp51932,UTF-8,JIS,ASCII,EUC-JP", $_REQUEST);
print_r ($_REQUEST);
?>
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body>
<br><br>
<FORM method="POST" action="<?php echo $PHP_SELF ; ?>">
名前<INPUT size="25" type="text" style="ime-mode:active" name="name">
<INPUT type="submit" name="check" value=" 確認する">
</FORM>
</body>
</html>
--
(セキュリティ云々の話をすれば、そもそもShift-JISを使うこと自体避けた方がいいんですけど、それはまた別のお話。)
No.2
- 回答日時:
ご質問の条件での文字化け原因として3種類考えられます
1.WEBサーバーの入力設定不備
php.ini にて mbstring.http_inputの設定でIBM拡張文字を使えない文字コード
が使用されていると勝手に変換されるため文字が化けます
その場合は、mbstring.http_input = pass に変更して試してください
2.内部処理コードのとの不整合
この場合は、以下のような処理を追加してみてください
ini_set('default_charset' , 'SJIS-win');
ini_set('mbstring.internal_encoding' , 'SJIS-win');
ini_set('mbstring.http_output' , 'SJIS-win');
3.WEBサーバーは正しく処理しているがブラウザが文字コードを識別できない
その場合は PHPスクリプトの出力に文字コードを指定するヘッダーを追加出力
してみてください。
この回答への補足
ありがとうございます。
実際に以下の通り追加して動かしてみたのですがやはり現象は同じでした。
(機種依存文字だけだと文字化けすることなく、普通の文字と混ぜると化ける)
ini_set('mbstring.http_input' , 'pass');
ini_set('default_charset' , 'SJIS-win');
ini_set('mbstring.internal_encoding' , 'SJIS-win');
ini_set('mbstring.http_output' , 'SJIS-win');
No.1
- 回答日時:
(1)headerを設定してみる
header("Content-Type:text/html;charset=sjis-jp");
(2)使用言語を明示してみる
mb_internal_encoding("SJIS-win");
ちなみにきょうび$PHP_SELFを使うのはセキュリティ的に時代遅れ
php.iniのregister_globalesがonになっているならoffに変更しましょう
原則$_SERVER["SCRIPT_NAME"]をつかってください。
この回答への補足
ありがとうございます。
実際にヘッダーを追加して以下のようにしました。
ですが現象は同じでした。何が問題のか検討つかず・・・
header("Content-Type:text/html;charset=sjis-jp");
ini_set('mbstring.http_input' , 'pass');
ini_set('default_charset' , 'SJIS-win');
ini_set('mbstring.internal_encoding' , 'SJIS-win');
ini_set('mbstring.http_output' , 'SJIS-win');
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpの問い合わせフォームを作っ...
-
reuterの記事をbeautiful.soup....
-
PHP8でWarning:Undefined varia...
-
composerをインストールしたい...
-
Q&Aサイトを作成していてURLの...
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
SplFileObject を利用したとき...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
-
PHPについて。
-
phpのheader("Location:#pos")...
-
PHPからCSVをアップロード後、m...
-
[php初心者]サイトを見てデータ...
-
phpに関わる所での、form actio...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字化けについて
-
phpの画面表示が真っ白です
-
日付と年月日を選択するコード...
-
PHPでHTLM入力された背...
-
ライブドアブログにPHPスクリプ...
-
phpの質問です
-
PHP→JavaScriptへの書き換え
-
一つのphpファイルでframeset
-
外部PHPファイルの読込みについて
-
phpでテキストファイルへ書き込み
-
PHPをはじめて1日目なので・・・
-
header関数について
-
mb_convert_variablesで変換出...
-
更新pingの送信について
-
Wordpressを利用したソート機能...
-
連番を書き出すなどの単純処理...
-
ここでの ②if($su_d<>"")の比較...
-
文字列の一部を取り出したいの...
-
POSTされた値をEUCで表示したい
-
ローカル環境で動くのに本番環...
おすすめ情報