2009-06-30 37 views
3

私はすでに多くの機能を試しましたが、これを理解することはできません。とにかく、正しい方法。PHPの特殊文字の変換

descriptionというフォームフィールドでは、すべての種類の文字を期待できます。これらは、HTMLエンティティにフォーマットされてからdbに送信される必要があります。 ':

mysql_real_escape_string($formdesc); 

しかし、これは時々doesnの文字列をオフ':今

、私のコード

$formdesc = htmlentities($_POST['formdesc'], ENT_QUOTES); 

MySQLのクエリのために、私は単純にスラッシュしても "安全" 機能を追加します仕事。例えば、 "é"は&Atildeになります。 éの代わりに©

これには通常の機能が必要です。誰も私が何を意味知っていますか?

+1

これはデータベースの言語設定と関係がありませんか? – peirix

+0

それはユニコード問題のようです。一般的に、データベースとフロントエンドの両方にutf8を使用してみてください。 –

+1

はい、私は文字列をエンコードする際にutf-8エンコーディングの設定を忘れました:) thx! –

答えて

13

あなたは(ここではUTF-8)htmlentities functionのエンコーディングを指定する必要があります。

$formdesc = htmlentities($_POST['formdesc'], ENT_QUOTES, 'UTF-8'); 

そうでない場合は、デフォルト値ISO-8859-1が使用され、0xC3A9としてUTF-8でエンコードされたあなたの例では、文字éは次のようになり2文字(Ãおよび©)と解釈されます。

しかし、どうしてなぜhtmlentitiesを使用しますか? &<>"および'htmlspecialcharsのようなHTML特殊文字をエスケープするだけで十分です。

+0

それは動作します!そう、シンプルなんだけどね! btw>なぜ>それはより安全に見えました、間違っていますか? –

+0

あなたが使用しているエンコーディングでその文字をエンコードできない場合は、追加の文字を文字参照で置き換えるだけです。しかし、Unicodeには既知の文字が含まれており、UTF-8でそれをエンコードすることができるため、HTMLの特殊文字以外の文字を置き換える必要はありません。 – Gumbo

1

あなたはいつものPHPエスケープ関数は、UTF-8のテキストでは動作しませんようにジョシュ

+0

thx、はい私は試しましたが、私は&eacute;翻訳。 htmlspecialchars()のみ&、 "、<, >、等右ですか? –

1

はそう​​とhtmlspecialchars_decode()

を見しようとしています。たぶんHandling UTF-8 in JavaScript, PHP, and Non-UTF8 Databasesがお手伝いします。 utf-8とPHPに関する別の情報源はPHP UTF-8 cheatsheetです。

+0

あなたのコメントはありませんが、私はそれを今働いているのですが、私はutf-8タグを忘れてしまったよ、thx! –

+0

あなたは歓迎です。この仕事をするための正しいこと。 –