2011-10-05 6 views
8

PHPのhtmlentitiesとé文字に問題があります。私はちょうど私が間違っていることを誰かが見ることができればうまくいけば、私は見落としているエンコードの問題のいくつかの並べ替えの種類知っている。htmlentitiesとé(e acute)

予想通りストレートhtmlentities("é")を実行すると、éまたはéのいずれか(正しいコードを返しません。私はにhtmlentitiesのcharsetパラメータを使用して「UTF-8」()が、同じものになるために文字セットを強制しようとしました。

最終的な目標は、この文字を 'ISO-8859-1'でエンコードされたHTML電子メールで送信することです。エンコードに同じエンティティを強制しようとすると、同じ問題が発生します。電子メールの送信元には、 HTMLビューé

私の間違いを晴らすことができる人は誰ですか?

+0

をコード化していることを確認するためにのために私ははhtmlspecialcharsを追加しました。これは、あなたのe-acuteが翻訳されるべきかどうかを伝えます。これがうまくいかない場合は、いつもこのテーブルを取得してe-acuteを追加し、 'strtr($ string、$ table)'を使ってエンコーディングを行うことができます。 –

+0

ファイルがUTF-8でエンコードされていることを確認し、エンコード文字が正しく設定されていることを確認してください。 –

+0

サイトエンコードをUTF-8に設定した場合(「」タグまたはhttpヘッダーのいずれかを使用すると、アクセント付き文字をエンティティエンコードする必要はありません) – Spudley

答えて

11
// I assume that your page is utf-8 encoded 
header("Content-type: text/html;charset=UTF-8"); 

$in_utf8encoded = "é à ù è ò"; 

// first you need the convert the string to the charset you want... 
$in_iso8859encoded = iconv("UTF-8", "ISO-8859-1", $in_utf8encoded); 

// ...in order to make htmlentities work with the same charset 
$out_iso8859= htmlentities($in_iso8859encoded, ENT_COMPAT, "ISO-8859-1"); 

// then only to display in your page, revert it back to utf-8 
echo iconv("ISO-8859-1", "UTF-8", $out_iso8859); 
+0

ありがとう!私の電子メールのエンコーディングの問題。 –

+0

あなたは大歓迎です:) –

+0

エンコーディングを追加することが重要です。特に以前はhtmlentitiesがうまく働いていて、壊れていました。 PHPチームは、* defaults *をhtmlentitiesに一度変更するだけでなく、二度変更するという独創的な考えを持っていました。 5.4以前はISO-8859-1でした。 5.4以降、5.6より前はUTF-8でした。 5.6からは、php.iniのdefault_charset設定には何でも言えます。エンコードを指定すると、再び動作し、htmlspecialcharsは必要ありません。あなたが文書化された(!)デフォルトに頼らずに突然データを失った場合は、変更しないでください。 PHPは常に驚きに満ちています。良い方法ではありません。 – Aaa

2

http://php.net/html_entity_decodeをご覧ください。

$eacute = html_entity_decode("é",ENT_COMPAT,"iso-8859-1"); 

あなたは、PHPファイルのエンコーディングを気にする必要はありません。この方法は:あなたは、次の方法でこれを使用することができます。 編集:typo

+0

デコードしようとしていません。 –

-3

特殊文字をéとして保存した場合は、databaseに接続してすぐに次のように使用できます。

mysql_set_charset('utf8', $dbHandler); 

これで、データを表示するときにhtmlentitiesを使用する必要はありません。

+0

データベースについて何も言っていないことを覚えていません。 –

+0

私は知っていますが、あなたの状況と同じ状況で私と一緒に働いた提案です。この方法で、すべてをエンコードします。 'htmlentity'、' html_entity_decode'、 'html_entity_encode'などの他のphp関数の使用を避けます –

+0

私の状況には、どのような形や形や形のデータベースも関係していません。あなたは急いで投稿する前にお読みください。 –

2

あなたが `` get_html_translation_table()を呼び出すと、結果の配列を見て試してみてくださいそれは本当に

http://sandbox.phpcode.eu/g/11ce7/4

<?PHP 
echo htmlspecialchars(htmlentities("é", ENT_COMPAT | ENT_HTML401, "UTF-8")); 
関連する問題