为什么PHP会自动解码HTML实体?

为什么PHP会自动解码HTML实体?,php,Php,我有一些包含HTML实体的表单值,例如: <option value="Coup&#232;"> Coup&#232; </option> Coupè; 但是,一旦表单发布到服务器,如果我执行print\r($\u POST)然后查看页面的源代码,实体不在那里,它是实际的重音字符 我想我可以通过htmlentities运行post数据,但我想知道这是PHP的标准行为吗?或者这是我可以关闭的吗?PHP不是;浏览器正在运行。您可以使用Firebug

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

<option value="Coup&#232;"> Coup&#232; </option>
Coupè;
但是,一旦表单发布到服务器,如果我执行
print\r($\u POST)
然后查看页面的源代码,实体不在那里,它是实际的重音字符


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

PHP不是;浏览器正在运行。您可以使用Firebug或嗅探器来检查这一点。

PHP不是;浏览器正在运行。您可以使用Firebug或嗅探器来检查这一点。

浏览器在遇到实体时正在解码实体,这就是他们的目的。字符串
和#232
的意思是“亲爱的浏览器,请用字符‘è’替换它,因为无论出于什么原因,我都不能直接写‘è’

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

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

Coup&amp;#232;
这将由浏览器解码为

Coup&#232;

不过,在今天这个时代,我对这种编码的使用提出了质疑,在大多数情况下,Unicode字符不应该构成一个问题,以保证这种编码从一开始就存在。只要写上“Coupè”就可以了

浏览器在遇到实体时正在解码实体,这就是他们的目的。字符串
和#232
的意思是“亲爱的浏览器,请用字符‘è’替换它,因为无论出于什么原因,我都不能直接写‘è’

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

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

Coup&amp;#232;
这将由浏览器解码为

Coup&#232;

不过,在今天这个时代,我对这种编码的使用提出了质疑,在大多数情况下,Unicode字符不应该构成一个问题,以保证这种编码从一开始就存在。只要写上“Coupè”就可以了

@alex页面的源代码未解码,表单提交的值为。浏览器在将其作为post值发送之前会更改该值。@alex是的,浏览器在读取源代码时会对源代码中的实体进行解码,并在解码后的表单中使用。这就是为什么
Coupè显示为
Coupè
。来源!==DOM!==POST.我不确定我是否理解-你是说值中的HTML实体被解码,然后作为字符而不是编码提交?它们被解码为Unicode码点,然后使用页面或表单中给定的字符集编码提交。@alex页面的源代码未被解码,表单提交的值为。浏览器在将该值作为post值发送之前会更改该值。@没错,浏览器在读取源时将对源中的实体进行解码,并将在解码后的表单中使用。这就是为什么
Coupè显示为
Coupè
。来源!==DOM!==我不确定我是否理解-你是说值中的HTML实体被解码,然后作为字符而不是编码提交?它们被解码为Unicode代码点,然后使用页面或表单中给出的字符集编码提交。