2013-07-12 19 views
5

私はutf8に外国語の文字列を格納しています。それらを表示するときに、アクセント付きの文字がHTMLの対応文字になるように変換することができます。 ééPHPでアクセント付きの文字をHTMLに変換するには?

となりますが、私が見つけることができるのはhtmlentities()ではありません。

+4

これを実行する必要がある理由を説明してください。 UTF-8でエンコードされたHTMLを生成する場合は、UTF-8文字を出力するだけです。 – jeyk

+0

まあ、そうです。これはちょうどよいことではないようです。 – Gabriel

+0

それ以外にも、本当にエンティティに変換したいのであれば、 'htmlentities'が本当にそれになります。なぜあなたはその反対を考えるのですか? – Jon

答えて

8

htmlentities()に電話する際に、エンコードを正しく指定していることを確認してください。

ドキュメントにはデフォルトで'UTF-8'が表示されていますが、さらに少し読んだら、それはPHP 5.4以降の新機能です。古いバージョンを使用している場合、デフォルトは実際には'ISO-8859-1'であり、デフォルトの動作に頼るのではなく、明示的に'UTF-8'と指定する必要があります。

htmlentities($string, 0, 'UTF-8'); 
+0

アクセント付き文字(à、è、ì、ò、ù、...)のエンティティを生成したいが、HTMLコードを保持したい場合があるので( "<" and ">"を忘れずにエスケープされたエンティティをエスケープする。この場合、次のコードを使用できます: '$ string = str_replace(配列<"、 ">")、配列( "<", ">")、htmlentities($ string、ENT_NOQUOTES、 'UTF-8'、FALSE)) ; ' このコードはPHP> = 5.2.3と互換性があります – lucaferrario

7

この問題は非常に簡単な解決方法です。

最初の部分は、テキストをエンコードしようとします。 $出力が空文字列を返した場合、値はutf8でエンコードされ、htmlエンティティが作成されます。

$output = htmlentities($value, 0, "UTF-8"); 
if ($output == "") { 
    $output = htmlentities(utf8_encode($value), 0, "UTF-8"); 
} 

例:

Montréal 

出力:

Montr&eacute;al 
関連する問題