• ベストアンサー

PHPで「®」や特殊文字のエスケープ

PHPでフォームから送られてきたデータを、MySQLに登録する際に、 「®」や特殊文字をエスケープして登録したいのですが、 どのようにしたらいいのでしょうか。 「<」や「&」などはhtmlspecialcharsでエスケープできているのですが、 「®」や特殊文字(~やm2など)がエスケープできず、 文字化けを起こして困っています。

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

  • ベストアンサー
noname#138894
noname#138894
回答No.2

htmlspecialchars()では対応しきれない文字について htmlのエンティティに変換したいということであれば、 htmlentities() http://www.php.net/manual/ja/function.htmlentities.php で対応可能ですが、 違う場合は、具体的にどういうコードを書いていて、どの時点での文字化けを問題にしているかを明確にするといい回答があると思いますよ。

hukazuo
質問者

お礼

ありがとうごじあます。 htmlentities() を使用してみたら解決しました。

その他の回答 (2)

noname#138894
noname#138894
回答No.3

No2の補足です。 もし、MySQLにデータを格納する際に MySQLの制御文字 http://dev.mysql.com/doc/refman/5.1/ja/string-syntax.html 以外が文字化けするのであれば、 それはエスケープの問題ではなく、文字コード変換の問題です。 仮に ・HTML(ファイル自体の文字コードとmeta情報) ・PHP ・MySQL(フィールドの文字コード、set namesで指定される文字コード) 全てで使っている文字コードがUTF-8やであれば、 ~や平方メートルでも問題なく保存出来ます。 cp932(Sjis-win)で統一しても問題保存できます。 HTMLとPHPがsjisでMySQLがcp932だったりすると化けます。 出力時も同じで、 正常にsjis-winで格納されてるデータを、sjisのつもりで取り出すと、 一部文字だけ化けます PHPまで正常に取り出せても、 HTMLに出力する段階でメタデータがsjisに設定されていると、 ブラウザ表示の時点で化けます。 ということで、文字コードが正しいのかを一度ご確認されることをお勧めします。

hukazuo
質問者

お礼

ありがとうございます。 再度、文字コードを確認してみます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

単純にstr_replace()でリストをつくって地道に変換してやる とくに波ダッシュは全角チルダと様々なところで混在しているので 注意が必要です。 <?PHP $hoge=$_REQUEST["hoge"]; $fromlist=array("®","~","m2"); $tolist=array("&reg;","&#xFF5E;","&#x33A1;"); $hoge=str_replace($fromlist,$tolist,$hoge); print $hoge; ?> <form> <input type="text" name="hoge" value="test®~m2test"> <input type="submit" value="go"> </form>

hukazuo
質問者

お礼

ありがとうございます。 関数とか作っておくべきですね。。。