我有一些包含HTML实体的表单值,例如:
<option value="Coupè"> Coupè </option>
但是,一旦表单发布到服务器,如果我执行print_r($_POST);
然后查看页面的来源,实体就不存在,它是实际的重音字符。
我想我可以通过htmlentities运行post数据,但我想知道这是PHP的标准行为吗?或者这是我可以关闭的东西吗?
答案 0 :(得分:9)
PHP不是;浏览器是。您可以使用Firebug或嗅探器进行检查。
答案 1 :(得分:2)
浏览器在遇到实体时对其进行解码,这就是它们的用途。字符串è
表示“亲爱的浏览器,请将其替换为字符'è',因为无论出于何种原因我无法直接写'è'。”
浏览器将解码页面中使用的任何实体,无论它们是可见文本还是属性值。
因此,由于浏览器正在解码实体,如果要使用可以解码为实体的字符串,则必须对实体本身进行编码:
Coup&#232;
这将由浏览器解码为
Coupè
我对这个问题的使用提出了质疑,在这个时代,在大多数情况下,Unicode字符不应该成为保证这种编码开始的问题。只需写下“Coupè”即可完成。 :)