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で質問しましょう!
似たような質問が見つかりました
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- PHP php ログイン 1 2022/11/01 00:24
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字化けについて
-
URLエンコーディングで悩ん...
-
前後の全角スペースを削除する...
-
以下のエラーに対処できずに困...
-
PHPでのアンケート設置について
-
mb_convert_variablesで変換出...
-
現在位置より2つ上のディレク...
-
onedrive にexcelファイルをア...
-
ワードプレス、Contact Form 7...
-
phpでクラスのメソッドで同名の...
-
トランザクションが原因?DBに...
-
同じ日付が取得できない
-
OpenPNE設置時のエラー
-
URLの変わらないページをPHPで...
-
[ ディレクトリ '.' は書き込み...
-
phpでPEAR::DBを使っているので...
-
再投稿です。初MacでPythonの勉...
-
値の取り出し方について教えて...
-
ファイルアップロードについて...
-
PHPで、複数のアドレスにメール...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
htmlのエラーについて(デバッグ)
-
php ログイン
-
文字化けについて
-
日付と年月日を選択するコード...
-
PHP postgreSQL(teraterm)を用...
-
前後の全角スペースを削除する...
-
ここでの ②if($su_d<>"")の比較...
-
複数の文字列をファイルに書き...
-
PHP(smarty)についての質問(文...
-
phpの画面表示が真っ白です
-
機種依存文字の文字化けについて
-
ローカル環境で動くのに本番環...
-
XAMPP1.7.1上でPHPを実行すると...
-
文字コードの出力を変更したい
-
XMLパースエラー回避方法
-
どうしたら確認ができますか!?
-
phpでfopen()やfputs()が使えない
-
pdf表示
-
ファイルをアップロードすると...
-
zampp PHPでPOSTの変数が返っ...
おすすめ情報