为什么PHP会自动对HTML实体进行自动编码?

时间:2010-02-22 03:09:12

标签: php

我有一些包含HTML实体的表单值,例如:

<option value="Coup&#232;"> Coup&#232; </option>

但是,一旦表单发布到服务器,如果我执行print_r($_POST);然后查看页面的来源,实体就不存在,它是实际的重音字符。

我想我可以通过htmlentities运行post数据,但我想知道这是PHP的标准行为吗?或者这是我可以关闭的东西吗?

2 个答案:

答案 0 :(得分:9)

PHP不是;浏览器是。您可以使用Firebug或嗅探器进行检查。

答案 1 :(得分:2)

浏览器在遇到实体时对其进行解码,这就是它们的用途。字符串&#232;表示“亲爱的浏览器,请将其替换为字符'è',因为无论出于何种原因我无法直接写'è'。”

浏览器将解码页面中使用的任何实体,无论它们是可见文本还是属性值。

因此,由于浏览器正在解码实体,如果要使用可以解码为实体的字符串,则必须对实体本身进行编码:

Coup&amp;#232;

这将由浏览器解码为

Coup&#232;

我对这个问题的使用提出了质疑,在这个时代,在大多数情况下,Unicode字符不应该成为保证这种编码开始的问题。只需写下“Coupè”即可完成。 :)