8

もちろん、これは以前に尋ねられ、解決策を探してきましたが、これまでのところすべてうまくいきませんでした. htmlentitiesorを使用して、TM 記号とアンパサンドを html の等価物に変更したいと考えていますhtmlspecialchars

$TEST = "Kold Locker™ & other stuff";
echo "ORGINIAL: " . $TEST . "<BR/>";

echo "HTML: " . htmlentities($TEST, ENT_COMPAT, 'UTF-8');

これは次のように表示されます。

ORGINIAL: Kold Locker™ & other stuff
HTML: 

私もそれを試してみましたがhtmlspecialchars、2番目のパラメーターが同じ結果で変更されました。

他のソリューションで機能したと他の人が主張していて、私が見逃しているものは何ですか?

更新:表示してみたところ表示utf8_encode($TEST)されましたHTML: Kold Locker™ & other stuff

4

5 に答える 5

6

理由はわかりませんが、これでうまくいきました ( htmlentities を 2 回呼び出す必要があります) 。

$html="<html> <head><head>something like this   </html>"
$entities_correction= htmlentities( $html, ENT_COMPAT, 'UTF-8');
echo  htmlentities( $entities_correction, ENT_COMPAT, 'UTF-8');

出力:

&lt;html&gt; &lt;head&gt;&lt;head&gt;something like this &lt;/html&gt;

于 2013-06-04T00:49:59.620 に答える
6

私は Pjack と同じ問題を抱えていると思いました (7 月 14 日 8:54 のメッセージ):

$str = "A 'quote' is <b>bold</b>";
echo htmlentities($str); 

ブラウザ(私の場合はFirefox)で元の文字列 $str (翻訳なし)を提供しますが、

echo htmlentities(htmlentities($str));

与えます:

A 'quote' is &lt;b&gt;bold&lt;/b&gt; 

(windows-7 XAMPP から取得した PHP/5.4.16 を使用します)。

しかし、もう少し考えてみると、ブラウザに文字列 < が表示されることがわかりました。と > >および<として。(ブラウザでソースコードを参照してください)。htmlentities の 2 回目の呼び出しは & に変換され&amp;、ブラウザは最初に期待したものを表示します。

于 2013-08-31T08:37:18.523 に答える
4

あなたのコードは私のために働きます:-?

マニュアルページでhtmlentities()読むことができます:

戻り値

エンコードされた文字列を返します。

入力文字列に指定されたエンコーディング内の無効なコード ユニット シーケンスが含まれている場合、ENT_IGNORE または ENT_SUBSTITUTE フラグが設定されていない限り、空の文字列が返されます。

私の推測では、入力データが UTF-8 として適切にエンコードされておらず、関数が空の文字列を返しています。(スクリプトがクラッシュしていないこと、つまり、その部分の後のコードがまだ実行されていることを前提としています。)

于 2013-04-04T16:01:16.137 に答える
1

私はほぼ同じ問題を抱えており(どういうわけか毎回同じテキストが表示されていました)、さまざまなエコーの組み合わせでそれを取得しました。Firefox などの Web ブラウザでは、毎回同じテキストが表示されるようです。これはecho、htmlentities-text を使用すると、エコー中に通常のテキストに変換されるためです。変数/テキストを使用してスクリプトをエコーすると、console.log実際には htmlentities テキストが (ほぼ) 正しくエコーされます。すべての特別な文字をhtmlコーディングに置き換える代わりに、以前に見た他のコーディングに置き換えます(名前を思い出せません)。Htmlentities-ing をもう一度実行すると、同じテキストが再度エコーされます (すべてが変換されることを思い出してください) が、console.log-version でエコーすると、期待どおりの結果が得られます。1. 2 回
実行します。htmlentities !
2. (少なくとも Firefox では) htmlentitiesを通常どおりWeb ページにエコーしないでください。値が実際に正しいかどうかを確認したい場合は、それをコンソールに記録するスクリプトをエコーし​​ます。 これが同じ問題を抱えている他の人に役立つことを願っています, VicStudio

EDIT$_POST : 3. Formularを使用している場合は、タグにaccept-charset="UTF-8"(または他の文字セットを)追加することを忘れないでください。<form>

さらに編集htmlentities:結果を通常のページにエコーしたい場合は、 2回だけ実行してください。データベースを直接送信したい場合は、一度だけ実行してください。→前に言ったことは部分的に間違っています。:(

于 2017-07-09T10:02:56.023 に答える