2011-05-17 74 views
0

我正在使用Zend Framework进行项目。为什么当我发出POST请求并通过$this->_request->getParams()获取控制器中的参数时,它显示未解码的值?例如,我的HTML表单中的一个字符串Speakers & keyboards从PHP中的getParams()中检索为Speakers & keyboards为什么PHP自动html解码我的POST?

不是PHP自动解码每个发布的值?

+0

您正在输入&&到一个表单中,并在服务器上接收到'&'?这很奇怪。 – deceze 2011-05-17 10:31:41

+0

是的,这正是我收到的。这很奇怪! – 2011-05-17 10:35:28

+0

它是一个纯文本输入?或者一个JavaScript所见即所得的编辑器?使用Firebug/Chrome调试器/ Charles /等检查浏览器实际发送的内容。 – Quentin 2011-05-17 10:37:44

回答

2

嗨,约翰,谢谢你的提示!我认为这是真正的问题,因为我正在做一个AJAX POST请求,并从页面HTML获取数据。所以我最好在发送请求之前使用urlDecode()之类的东西...你觉得呢?

那么问题是,你是发送HTML,你想要的文本。

当您从页面获取内容时,请使用文本而不是HTML。所以不要使用innerHTML或jQuery的.html()。获取textNode并阅读其data属性,或使用jQuery的.text()

+0

啊当然!非常好的解释大卫! – 2011-05-17 13:20:42

1

因为没有理由这样做。

数据被编码用于传输,然后再解码。 HTML不是用于传输的编码。

希望接收HTML的唯一原因是,如果发送了HTML,并且发送了HTML,那么(可能)HTML是期望的。转换为文本通常不会成为接下来发生的期望事情。

+0

大卫请参阅deceze的评论。我想你可能误解了我的问题。谢谢。 – 2011-05-17 10:36:24

1

PHP自动解码转义的内容,而不是HTML实体中的内容。

+0

嗨,约翰,谢谢你的提示!我认为这是真正的问题,因为我正在做一个AJAX POST请求,并从页面HTML获取数据。所以我最好在发送请求之前使用urlDecode()之类的东西...你觉得呢? – 2011-05-17 10:42:26

+0

我想我可能会在发送ajax请求之前使用来自http://phpjs.com的html_entity_decode javascript analog。你认为什么 - 这是一个解决方法,也许有更好的方法? – 2011-05-17 10:46:18

+1

为什么不在服务器上做呢?这迫使任何使用API​​的人遵守 - 服务器端验证通常比客户端更好。 否则,我认为问题出在你的AJAX库的某处。 URIEncode不应该添加任何实体编码到您的内容。 – 2011-05-17 10:49:21

相关问题