0

最初に、アンパサンド (&) が htmlentities 関数にある場合、アンパサンドが 5 文字としてカウントされることに気付きました。したがって、このコード:

$a = htmlentities("&12345");
$b = substr($a,0,6);
  echo $b; 

'&1'5文字としてカウントされていると思います。さらに興味深いのは、GBP 記号 (£) が一緒に無視されるため、次のようになります。

$a = htmlentities("£");
  echo $a;   

何もエコーしません。Chrome と FF で同じ結果が得られます。これがバグなのか、別の構文を使用する必要があるのか​​ わかりません。なぜこれが起こっているのか誰にも分かりますか?ありがとう

アップデート

これで£の問題を解決しました:$a = htmlentities("£", ENT_COMPAT, 'ISO-8859-15'); しかし、アンパサンドの問題は残ります。

4

1 に答える 1

1

htmlentities問題は、 (および同等の関数)からの出力がエンド ユーザーに表示するためにレンダリングされるブラウザー ウィンドウで出力を表示していることです。

例えば:

echo htmlentities("&");

文字をhtmlエンティティに相当するもの&に変換したため、出力されます。&長さが 5 文字であることを確認してください。ただし、シンボル&として事前にレンダリングされたブラウザーから表示しているため、全文は表示されません。&firfox では、ビューポートを右クリックして [ページのソースを表示] をクリックすると、全文が表示されます&...

あなたのコード:

$a = htmlentities("&12345"); //Outputs: &12345
$b = substr($a, 0, 6); //Selects first six charachters: &, a, m, p, ; and 1
echo $b; // Echo's: &1 which is displayed by the browser as &1

これを回避するには、関数の順序を変更できます。

$a = substr("&12345", 0, 6);
echo htmlentities($a);
于 2013-09-24T13:13:41.203 に答える