某些字符在htmlentities函数中表现异常

时间:2013-09-24 12:26:11

标签: php html html-entities

首先我注意到当&符号(&)在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'); 但是&符号仍然存在。

1 个答案:

答案 0 :(得分:1)

问题是您正在浏览器窗口中查看输出,其中htmlentities(和等效函数)的输出呈现给最终用户。

例如:

echo htmlentities("&");

将输出&,因为它已将&字符转换为其等效的html实体。看到它长五个字符。但是,您没有看到全文&,因为您正在浏览器中查看已将其预呈现为&符号。在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);