2010-12-13 7 views
1

フォームを使用してデータベースに入力するLONGTEXTのセットを格納するためにデータベースを使用しようとしています。しかし、éのような文字を入れたときにデータベースから出てくるのはなので、データベースに送信される前にPHPを使ってすべてのアクセント付き文字をHTMLエンティティに変換する方法はありますか?preg_replacing HTMLエンティティでアクセント付きの文字を代用する

私はhtmlentities();を認識していますが、これはコンテンツがページにエコーされたときにHTMLを読み込まないため、望ましくない文字を<に置き換えます。アドバンス

+0

正規表現を使用してみましたか? – Lockhead

+0

アクセント付き文字を置き換えるために正規表現を使用するにはどうすればよいですか? – Brad

答えて

4

あなたがそのようなようなものを見るたびに、それはあなたが文字セットの不一致を持っているサインです。

データベースとHTMLがすべてUTF-8エンコーディングで設定されている場合、問題は発生しません。 HTMLまたはデータベースのどちらかがLatin-1(ISO 8859-1)と他のUTF-8またはその逆を使用するように設定されている可能性があります。

これを解決するには、単一のキャラクタセットで統一します。私は普遍的なので個人的にはUTF-8が好きです。ただし、それができない場合は、PHPを使用してUTF-8とLatin-1の間で以下の機能を使用することができます。

UTF-8ラテン-1:へ

$latin_string = utf8_decode($unicode_string); 

ラテン1 UTF-8:

$unicode_string = utf8_encode($latin_string); 

データベースに送信する前に、あなたのデータをエンコードし、表示する前に、それをデコードした場合、またはその逆の場合は、データベース/ html設定に応じて、問題は解決されます。

また、サーバー上でPHP iconv拡張機能を使用できる場合は、これを使用して、正確に字体を変換したり、プレーンなASCIIに変換することができます。

http://www.php.net/manual/en/function.iconv.php

1

おかげで、あなたのアクセント付き文字をサポートしていないエンコーディングを使用してデータベースを持っているようですね。データベースとテーブルの両方のエンコーディングを見て、それらがUnicodeに優しいエンコーディングを使用していることを確認してください。私は、データベースとテーブルの両方のために最も一般的に好まれるエンコーディングは、単にUTF-8 Unicode(utf8)だと思います。

MySQLのUTF8とエンコーディングと照合の詳細については、http://dev.mysql.com/tech-resources/articles/4.1/unicode.htmlを参照してください。あなたはデータベースを指定していませんが、アプリケーションは関係なく同じでなければなりません。

+0

注:これは質問された質問には対処しませんが、質問を促した問題を潜在的に解決します。 – ebynum