dポイントプレゼントキャンペーン実施中!

PHPでフォームから送られてきたデータを、MySQLに登録する際に、
「®」や特殊文字をエスケープして登録したいのですが、
どのようにしたらいいのでしょうか。

「<」や「&」などはhtmlspecialcharsでエスケープできているのですが、
「®」や特殊文字(~やm2など)がエスケープできず、
文字化けを起こして困っています。

A 回答 (3件)

htmlspecialchars()では対応しきれない文字について


htmlのエンティティに変換したいということであれば、

htmlentities()
http://www.php.net/manual/ja/function.htmlentiti …
で対応可能ですが、

違う場合は、具体的にどういうコードを書いていて、どの時点での文字化けを問題にしているかを明確にするといい回答があると思いますよ。
    • good
    • 0
この回答へのお礼

ありがとうごじあます。

htmlentities()
を使用してみたら解決しました。

お礼日時:2011/08/24 15:51

No2の補足です。


もし、MySQLにデータを格納する際に
MySQLの制御文字
http://dev.mysql.com/doc/refman/5.1/ja/string-sy …
以外が文字化けするのであれば、
それはエスケープの問題ではなく、文字コード変換の問題です。

仮に
・HTML(ファイル自体の文字コードとmeta情報)
・PHP
・MySQL(フィールドの文字コード、set namesで指定される文字コード)
全てで使っている文字コードがUTF-8やであれば、
~や平方メートルでも問題なく保存出来ます。
cp932(Sjis-win)で統一しても問題保存できます。

HTMLとPHPがsjisでMySQLがcp932だったりすると化けます。

出力時も同じで、
正常にsjis-winで格納されてるデータを、sjisのつもりで取り出すと、
一部文字だけ化けます

PHPまで正常に取り出せても、
HTMLに出力する段階でメタデータがsjisに設定されていると、
ブラウザ表示の時点で化けます。

ということで、文字コードが正しいのかを一度ご確認されることをお勧めします。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/08/24 15:52

単純に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>
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/08/24 15:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!