![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
PHPでHTMLからPOSTされたデータが文字化けします。
超初心者ですので表現に誤りがあるかもわかりませんがお許しください。
現在、Win2003・MySQL5.1・PHP5.2と言う環境で簡単なデータベースを作成して、HTMLから検索して
一致したデータを表示させると言うものを作成しています。
検索欄に入力した一部の文字がどうしても文字化けしてしまい解決できません。
詳しくはまだ理解できていないのですが、おそらく検索窓に入力した文字がPOSTされて、それを受けたPHPが文字化けした文字でMySQLのデータベースを検索しようとしているのではないかなっと思ってます。
文字コードはすべてShift-JISで行っているつもりです。
たとえば、
全角の"。"や"?"などの2バイトコードが81**(違ってましたらすみません。。)入力すると
"。"は"B"に文字化けされ、"?"は"H"に文字化けします。
また、"院"や"法"などの**40を入力すると"・> <input type="と表示されて検索ボタンも消えておかしくなってしまいます。
これだけの情報ではお答えして頂けないかもわかりませんが、他にどのような情報があればいいのかもよくわかりません。
わかる範囲で結構ですのでご教授頂けないでしょうか。
よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
・cp932
これは、Microsoftが拡張した文字も含めたShift_JISのコードのことなので、sjisとは違います。
※詳しくは参考URLを読んでみて下さい。
・データベースの文字コード
LOAD DATA INFILEはデータベースではなくて、「テーブル」に対して行う処理ですので、
「CREATE DATABASE データベース名 CHARACTER SET cp932;」
などと、データベースを作成するときにデータベースの文字コードを指定する必要があります。
・「法」は、「・> <input type=」となってしまう
すみません勘違いしてました。「法」が文字化けするのであればSJISの「5C問題」とは別の現象ですね。
それでは下記を確認してみてください。
1.HTML部分をSJIS以外で記述していないか(EUC-JPかUTF-8)
2.または<meta http-equiv="Content-Type" content="text/html; charset=sjis">を書いていない
3.もしくは上記を、titleタグの後に書いている
4.POSTされた値に「mb_convert_encoding($_POST['example'], "SJIS")」などと指定している(SJISまたは、sjis-win、Shift_JIS)
いかがでしょうか。
hogehoge78さま
何度も申し訳ありません。
確認してみました。
> 1.HTML部分をSJIS以外で記述していないか(EUC-JPかUTF-8)
Shift-JISです。
> 2.または<meta http-equiv="Content-Type" content="text/html; charset=sjis">を書いていない
<head>に書いてます。
> 3.もしくは上記を、titleタグの後に書いている
<title>の1行上に書いてます。
> 4.POSTされた値に「mb_convert_encoding($_POST['example'], "SJIS")」などと指定している(SJISまたは、sjis-win、Shift_JIS)
特に指定しておりません。
これは指定していなくて正解と言うことですね。
以上のような感じです。宜しくお願い致します。
No.1
- 回答日時:
Shift_JISは、「表」や、「法」などの文字にバイトコード「5c」が含まれます。
「5c」というのは、「¥」です。
mysqlは、「¥」をエスケープ文字と認識します。
なので、mysql_real_escape_stringや、プリペアドステートメントなどで、二重でエスケープされてしまい、
「表\」、「法\」などとなる場合があります。
逆に、mysqlのデータベースを作成時に文字コードをきちんと「cp932」にしておらず、エスケープ処理を適切にしないでShift_JISの文字をINSERTし、SELECT文で表示しようとした場合、「表」の文字の最後の「5c」が消えて表示されてしまい、文字化けが発生したりします。
とりあえず質問者さんは、
・データベースの文字コードが「cp932」になっているか
・mysql_real_escape_stringなど、文字のエスケープ処理を行っているか
確認してください。
また、「my.cnf(mysqlのコンフィグファイル)」内の、
「default-character-set」が「cp932」になっているか
逆に上記は設定されていないが「skip-character-set-client-handshake」が設定されているか。
なっていなければ、どちらかを設定してください。
【参考URL1】http://dev.mysql.com/doc/refman/5.1/ja/charset-c …
【参考URL2】http://www.klab.jp/media/mysql/index6.html
この回答への補足
hogehoge78さま
ご回答ありがとうございます。
アドバイス頂きました内容について的確にお答え出来ていないかもわかりませんが、
> ・データベースの文字コードが「cp932」になっているか
データベースはCSVファイル(Shift-JIS)からLOAD DATA INFILE・・で取り込んでいるのですが、これでデータベースがShift-JISになっていると考えていいのでしょうか。
> ・mysql_real_escape_stringなど、文字のエスケープ処理を行っているか
勉強不足で申し訳ありません。調べてみます。
> 「default-character-set」が「cp932」になっているか
「cp932」と「sjis」は同じと考えてよろしいでしょうか。
「my.ini」で、default-character-set=sjisとなってます。
文字化けはコマンドプロンプト上でMysqlを操作した場合は何も起こらないのです。
また、IEを使ってブラウザ上にデータベースを表示するだけなら問題なくきれいに表示されるのですが、検索したキーワードに「法」や「院」や「。」などが含まれているとおかしくなります。
> 「表\」、「法\」などとなる場合があります。
この環境では、「表」は正常に表示されます。
「法」は、「・> <input type=」となりおかしくなります。
いろいろとアドバイス頂きましてありがとうございました。
少し原因が特定できまして、POSTされた文字列の処理過程で、
$keyword = $_POST['keyword'];
$keyword = ereg_replace("[ ]+", " ", $keyword);
と言うものを参考にしていたサイトに書かれていたものをそのまま使っていたのですが、この処理を行う際に文字化けを起こすことがわかりました。
何故なのかはわからないのですが、少しずつ調べてみたいと思ってます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP 文字列を段落で分ける方法を教えて下さい。 2 2023/03/09 10:03
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Access(アクセス) capeofdragonと申します。 Access2016を使っております。 あるフォームがあり、テ 2 2022/09/09 13:18
- その他(ソフトウェア) ソースネクストアプリをインストールし、製品登録で半角英数字が入力できない 5 2022/07/03 22:44
- オープンソース csvデータのダブルクォーテーションで囲まれた文字内にあるカンマを削除したい 3 2022/09/02 15:17
- Android(アンドロイド) スマホでパソコン操作の文字入力 2 2022/05/12 21:13
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォームで戻った際に入力済み...
-
ゆゆにゃ。
-
PHP8を使うと、大量のWarningが...
-
ワードプレスサイト PHP8.0.25...
-
PHPで入力フォームでデータを確...
-
preg_matchで Warning: Undefin...
-
phpでPEAR::DBを使っているので...
-
index.phpって何ですか? 具体...
-
jpgraphで表示されない
-
phpinfo で MySQL のバージョン...
-
phpのエラーについて
-
PHPでこのコード自体に意味は無...
-
PHPとHTML+Xamppの掲示板で画像...
-
awsにApacheとPHPを入れて、何...
-
PHPで画像の渡しが上手く行きま...
-
php エラー
-
functionsでどこまで括るのか固...
-
オススメのプログラミングスク...
-
MySQLの配置が変わったため、db...
-
アマゾンのような評価の星を選...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPでこのコード自体に意味は無...
-
こちらはただの直列処理ですか?
-
phpでcookieがうまく保存されない
-
プログラミング言語で、使える...
-
【初心者】XAMPPのapacheの(恐...
-
PHP8を使うと、大量のWarningが...
-
PHPSpreadsheetを使って関数を...
-
ワードプレスサイト PHP8.0.25...
-
フォームで戻った際に入力済み...
-
PHPで画像の渡しが上手く行きま...
-
Q&Aサイトを作成していてURLの...
-
phpのメールフォームの完了画面...
-
PHPでユーザー情報を入力して簡...
-
PHPのエラーの解消法について教...
-
PHPで訪問回数を表示するカウン...
-
php 完了画面の送信メールのコ...
-
php 入力画面から確認表示画面...
-
アマゾンのような評価の星を選...
-
PHPとHTML+Xamppの掲示板で画像...
-
SFTPなどは使わないホームペー...
おすすめ情報