PHPにてプログラムを製作しております。


フォームから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

回答の条件
  • 1人5回まで
  • 登録:2007/06/21 18:44:46
  • 終了:2007/06/28 18:45:03

回答(4件)

id:t_shiono No.1

t_shiono回答回数256ベストアンサー獲得回数222007/06/22 01:41:44

ポイント27pt

もう少し具体的に症状を教えてもらえますか?

データが壊れるとのことですが、それはどのように確認されていますか?例えば、

・フォームデータをそのままページに出力したところ、何も表示されなかった

・フォームデータをファイルに書き出してみたところ、何も書き込まれていなかった

・フォームデータをDBに格納したところ、DB内の文字列が空だった

・フォームデータをDBに格納し、DBから読み取ったデータを表示するページで見ると、何も表示されなかった


といった辺りが想像されます。

それによって考えられる部分が変わりますが、


これだけではなんなので、magic_quotes_gpcをOFFにすると、どうなりますか?

id:ebagos

・フォームデータをそのままページに出力したところ、何も表示されなかった

になります。

magic_quotes_gpcをOFFにしても、同じでした。

よろしく、お願いいたします。

2007/06/22 18:10:00
id:Yota No.2

Yota回答回数453ベストアンサー獲得回数282007/06/22 09:18:07

ポイント27pt

このようなテストスクリプトを実行してしても半角カタカナが変換もしくは消滅しますか。

<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>

id:ebagos

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

半角カタカナもですが、半角でなくても、なにも、表示されませんでした。

2007/06/22 18:10:18
id:t_shiono No.3

t_shiono回答回数256ベストアンサー獲得回数222007/06/22 20:22:06

ポイント26pt

表示しているブラウザで文字コードを指定しても何もでませんか?

UTF-8で出力していても、ブラウザの自動判別が適切に機能しておらずShift_JISとして表示したりすると、何も表示されないことがあります。

それでもだめであれば、

print_r ($_POST);

とかしては何が表示されますか?

id:ebagos

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

下記のような感じで表示されました。

ryo_nameが半角カタカナで入力した箇所です。

Array ( [ryo_loginid] => 07251 [ryo_password] => 658451 [ryo_name] => ? [ryo_stayear] => 2005 [ryo_endyear] => 2012 [ryo_id] => 36 [form_ste] => kakunin [Submit] => )

よろしく、お願い致します。

2007/06/23 13:44:00
id:elf No.4

えるふん回答回数76ベストアンサー獲得回数82007/06/23 14:23:32

ポイント10pt

mbstring.language = neutralの値をJapaneseにする

今回あまり関係ないと思いますが日本語限定ならお勧めします)

mbstringの設定から自動変換系の設定を行わない

自分で文字エンコードを確認しながら適切に変換を行う(自動変換はえてして誤認識をします)

  • mbstring.http_input = auto
  • mbstring.encoding_translation = On

をはずす.

どうしても自動変換するならmbstring.detect_order = autoは適切な値にする

autoの判断基準と件のページの基準が一致しない場合,誤変換としての精度が高まると思われます.

無駄な出力変換を除去する

HTMLコンテンツをそもそもShift_JISで生成しているなら下記はまったく必要ありません(むしろ意図しない文字変換が行われる可能性があります)

  • mbstring.http_output = SJIS

参考まで:

http://blog.poyo.jp/id-1147328204

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません