- ベストアンサー
SJISのダメ字について
php4、postgres8でデータベース登録をしています。 server_encoding、client_encoding共に SQL_ASCIIです。 フォームから受け取った文字列をDBに書き込むと 特定文字だけ文字化けします。 ダメ字といわれる文字です。 文字化けしないようにINSERTするには どうしたらよろしいのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
PHPは内部処理にSJISは使えません。SJISの【表】【予】【ソ】にはaddslashesでエスケープすべき文字が含まれているって判断されてしまうので"\"が付いちゃうんです。だからmbstring.internal_encodingの値はEUC-JPなどにして、フォームからの文字列はEUC-JPに変換してから内部処理してあげないといけないんです。表示をSJISで行うなら、出力時に再度SJISに変換する必要があります。php.iniの設定によって、このあたりの文字コード変換を自動で行う事もできます。参考URLを見て下さい。
その他の回答 (3)
- wakame0729
- ベストアンサー率32% (245/765)
補足です。 「文字コード変換を自動で行う事もできる」と書きましたが、PHPで日本語を扱う限り文字コードの問題は当面付いて回るので、それをしっかり理解するためにも入力、内部処理、出力、それぞれ箇所でどういう文字コードなのかをきちんと認識して、自動変換は行わず、意識して文字コードの変換を行う事をオススメします。 ちなみに日本語処理はある意味お約束のルーチンワークですから、使いまわしのできる形でサブルーチン化しておくと後々楽ですよ。
- happy_books
- ベストアンサー率28% (131/460)
私も、ダメ字というのは、初めて見聞きしました。 とはいえ、確かな名称は思いつかないですねー。 sjis文字化け文字、だと長いし。 postgres8は分からないのですが、文字コードですが、 EUCじゃダメなんですか? 私は基本的にEUCにして、再度確認してるんですが。 どちらにしても、一度EUCにコンバートしないと ダメみたいですねー。 http://www.roje.co.jp/blog/blog.php?mode=MsgList&id=b_1_
お礼
あいがとうございます。 本当はEUCにしたいのですが・・・ ある事情があって出来ないのです。
- yoneda_16
- ベストアンサー率47% (166/350)
「ダメ字といわれる文字」とはなんでしょうか。「ダメ字」という表現ははじめて聞きました。Googleで調べたかぎりでは「ダメ字」というフォントの情報ばかりで、当該問題とは関係ないように思えます。 具体的にどういう記号だとか漢字だとかが「ダメ字」と呼ばれているのか、できればどこでそのように呼ばれているのか教えてください。
補足
【表】【予】【ソ】などの文字です。 [¥]エスケープシーケンスの5Cの問題らしいのですが。 検索したら、ダメ字という表現をされていたからです。
お礼
ありがとうございます。 参考にします。