【问题标题】:Posting string encoded with htmlentities back to the server将使用 htmlentities 编码的字符串发送回服务器
【发布时间】:2012-11-06 13:33:08
【问题描述】:

我在视图中生成这个:

<form method="post">
       <input type="hidden" 
              name="test" 
              value="<?=htmlentities('<>"&ščé', ENT_QUOTES, 'UTF-8')?>">
       <input type="submit>
</form>

现在,在处理来自表单的数据时我应该这样做吗?

$decodedTest = html_entity_decode($_POST['test'], ENT_QUOTES, 'UTF-8');

我觉得应该没问题:

$decodedTest = $_POST['test'];

但是我没有找到这个的参考。

编辑:我打印了test 的发布值,并且我看到该值未编码。我不知道我是否可以依靠这种行为以及为什么。我问的是操作理论。如果我查看原始发布请求,我可以看到发布数据是 urlencoded(我猜这是与 htmlentities 不同的编码类型)。这是否意味着客户端必须在发送请求之前执行一些重新编码。 (客户端)浏览器在发送之前是否将输入值以编码形式或解码形式存储在内存中? (我已经知道 php 会自动解码请求中的 urlencoded 数据,所以这部分对我来说相当清楚)。

【问题讨论】:

  • 阅读“跨站点脚本”。

标签: php post html-entities


【解决方案1】:

您实际上并不需要引用,因为打印 htmlspecialchars($_POST['test'])(或仅设置 Content-Type: text/plain)会立即显示 $_POST 中的数据不是实体编码的。

您也不需要调用htmlentities 来对视图中的数据进行编码——如果您的目标是生成有效的标记,htmlspecialchars 就足够了。

【讨论】:

  • @clime:你可以依赖这个,是的。不幸的是,您可以调用 PHP 很多东西,但过度指定不是其中之一,因此 AFAIK 没有参考支持这一点。就是这样。客户端对数据进行 urlencode 以使其符合 HTTP 规范。它如何将数据保存在内存中并不重要(尽管它当然会使它们保持原始状态)。
【解决方案2】:

发送表格,您可以做到。更好的检查

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 2015-10-20
    相关资源
    最近更新 更多