• ベストアンサー

SJISのダメ字について

php4、postgres8でデータベース登録をしています。 server_encoding、client_encoding共に SQL_ASCIIです。 フォームから受け取った文字列をDBに書き込むと 特定文字だけ文字化けします。 ダメ字といわれる文字です。 文字化けしないようにINSERTするには どうしたらよろしいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

PHPは内部処理にSJISは使えません。SJISの【表】【予】【ソ】にはaddslashesでエスケープすべき文字が含まれているって判断されてしまうので"\"が付いちゃうんです。だからmbstring.internal_encodingの値はEUC-JPなどにして、フォームからの文字列はEUC-JPに変換してから内部処理してあげないといけないんです。表示をSJISで行うなら、出力時に再度SJISに変換する必要があります。php.iniの設定によって、このあたりの文字コード変換を自動で行う事もできます。参考URLを見て下さい。

参考URL:
http://www.php.net/manual/ja/ref.mbstring.php
rabu_chihaha
質問者

お礼

ありがとうございます。 参考にします。

その他の回答 (3)

回答No.4

補足です。 「文字コード変換を自動で行う事もできる」と書きましたが、PHPで日本語を扱う限り文字コードの問題は当面付いて回るので、それをしっかり理解するためにも入力、内部処理、出力、それぞれ箇所でどういう文字コードなのかをきちんと認識して、自動変換は行わず、意識して文字コードの変換を行う事をオススメします。 ちなみに日本語処理はある意味お約束のルーチンワークですから、使いまわしのできる形でサブルーチン化しておくと後々楽ですよ。

回答No.2

私も、ダメ字というのは、初めて見聞きしました。 とはいえ、確かな名称は思いつかないですねー。 sjis文字化け文字、だと長いし。 postgres8は分からないのですが、文字コードですが、 EUCじゃダメなんですか? 私は基本的にEUCにして、再度確認してるんですが。 どちらにしても、一度EUCにコンバートしないと ダメみたいですねー。 http://www.roje.co.jp/blog/blog.php?mode=MsgList&id=b_1_

参考URL:
http://www.roje.co.jp/blog/blog.php?mode=MsgList&id=b_1_
rabu_chihaha
質問者

お礼

あいがとうございます。 本当はEUCにしたいのですが・・・ ある事情があって出来ないのです。

  • yoneda_16
  • ベストアンサー率47% (166/350)
回答No.1

「ダメ字といわれる文字」とはなんでしょうか。「ダメ字」という表現ははじめて聞きました。Googleで調べたかぎりでは「ダメ字」というフォントの情報ばかりで、当該問題とは関係ないように思えます。 具体的にどういう記号だとか漢字だとかが「ダメ字」と呼ばれているのか、できればどこでそのように呼ばれているのか教えてください。

rabu_chihaha
質問者

補足

【表】【予】【ソ】などの文字です。 [¥]エスケープシーケンスの5Cの問題らしいのですが。 検索したら、ダメ字という表現をされていたからです。

関連するQ&A