フォームからpostしたデータに
半角カタカナが含まれると?になったり、
文字が消えたりします。
解決方法を教えてください。
設定は下記の通りです。
Windows 2003 server
IIS 6.0
PHP Version 5.2.3
output_buffering = no value
magic_quotes_gpc = On
default_charset = "Shift_JIS"
extension=php_mbstring.dll
mbstring.language = neutral
mbstring.internal_encoding = SJIS
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = no value
もう少し具体的に症状を教えてもらえますか?
データが壊れるとのことですが、それはどのように確認されていますか?例えば、
・フォームデータをそのままページに出力したところ、何も表示されなかった
・フォームデータをファイルに書き出してみたところ、何も書き込まれていなかった
・フォームデータをDBに格納したところ、DB内の文字列が空だった
・フォームデータをDBに格納し、DBから読み取ったデータを表示するページで見ると、何も表示されなかった
といった辺りが想像されます。
それによって考えられる部分が変わりますが、
これだけではなんなので、magic_quotes_gpcをOFFにすると、どうなりますか?
このようなテストスクリプトを実行してしても半角カタカナが変換もしくは消滅しますか。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"/>
</head>
<body>
<form method="POST">
<div>
<input type="text" name="inp1" />
<input type="submit" name="inp2"/>
</div>
</form>
<?php
mb_internal_encoding('SJIS' ) ;
mb_http_input('SJIS') ;
mb_http_output('SJIS') ;
if(isset($_POST['inp2'])) echo $_POST['inp1'] ;
?>
</body>
</html>
ご回答ありがとうございます。
半角カタカナもですが、半角でなくても、なにも、表示されませんでした。
表示しているブラウザで文字コードを指定しても何もでませんか?
UTF-8で出力していても、ブラウザの自動判別が適切に機能しておらずShift_JISとして表示したりすると、何も表示されないことがあります。
それでもだめであれば、
print_r ($_POST);
とかしては何が表示されますか?
ご回答ありがとうございます。
下記のような感じで表示されました。
ryo_nameが半角カタカナで入力した箇所です。
Array ( [ryo_loginid] => 07251 [ryo_password] => 658451 [ryo_name] => ? [ryo_stayear] => 2005 [ryo_endyear] => 2012 [ryo_id] => 36 [form_ste] => kakunin [Submit] => )
よろしく、お願い致します。
mbstring.language = neutralの値をJapaneseにする
今回あまり関係ないと思いますが日本語限定ならお勧めします)
mbstringの設定から自動変換系の設定を行わない
自分で文字エンコードを確認しながら適切に変換を行う(自動変換はえてして誤認識をします)
をはずす.
どうしても自動変換するならmbstring.detect_order = autoは適切な値にする
autoの判断基準と件のページの基準が一致しない場合,誤変換としての精度が高まると思われます.
無駄な出力変換を除去する
HTMLコンテンツをそもそもShift_JISで生成しているなら下記はまったく必要ありません(むしろ意図しない文字変換が行われる可能性があります)
参考まで:
・フォームデータをそのままページに出力したところ、何も表示されなかった
になります。
magic_quotes_gpcをOFFにしても、同じでした。
よろしく、お願いいたします。