2012-03-14 6 views
2

私のアプリケーションには説明フィールドがあります。このような引用符を含めると、 'すべてが壊れます。私は説明フィールド全体でhtmlentities()を使用していましたので、htmlspecialchars()を試しましたが、それも同様に破損しています。PHPのhtmlentitiesとhtmlspecialcharsで文字列が破られています

は、下のスクリーンショットでは、私が過去にこの問題を持っていたが、Iまし

This is what my string looks like after being run through htmlentities This is what my string looks like after being run through htmlentities

を「私はこれが動作したい」という文字列を送信し、次の混乱を得ましたそれを修正する方法がわかりません。

+0

ドキュメントのエンコーディングを「UTF-8」に設定し、それが修正されているかどうか確認してください。また、âを取得している場合、ダブルエンコーディングを意味する可能性がありますので、&は実際には& – MetalFrog

答えて

5

私はに

$text = htmlentities($text, ENT_QUOTES); 

から私のコードを変更することで問題を修正:PHPは、UTF-8としてデフォルト設定を示していますので、奇妙である

$text = htmlentities($text, ENT_QUOTES, 'utf-8'); 

+2

[manual](http://php.net/manual/en/function.htmlentities.php):* "省略した場合、5.4より前のバージョンのPHPではこの引数のデフォルト値はISO-8859-1です.0、UTF-8をPHP 5.4.0以降で使用しています。 "* utf-8はデフォルトではかなり新しいものです。私はいつもあなたが 'escape_html()'のようなものを簡単に変更できるように、ラッパー関数を使用します。 –

1

特定の文字を置き換えるだけであれば、簡単な検索と置換スクリプトを作成することがあります。

<?php 
    $bad = array('’', '&'); // add whatever you don't want here 
    $good = array('&rsquo;', '&amp;'); // replace it here 
    $description_field = str_replace($bad, $good, $description_field); 
?> 
+0

ですが、置き換える必要はありません。 –

0

私はhtmlentitieshtmlspecialcharsはUTF-8セーフ機能ではありません確信しています。彼らは、エンコードするHTMLエンティティとしてUnicode文字の最初のバイトを参照します。その後、ブラウザがUTF-8と思われるコンテンツを読み込むと、2つの無効なバイトが続くHTMLエンティティが表示されます。あなたはmb_ereg_replaceのような関数を調べて、手動で安全でない文字を交換する必要があるかもしれません

$output = mb_ereg_replace("/</","&lt;",$input); 

すべてあなただ本当には、文字列のHTMLセーフを作成する必要があります。私はマルチバイトセーフのstr_replaceを見つけることができないようですが、これも同様に動作し、UTF-8文字に問題がないことを保証します。

関連する問題