Php 将使用htmlentities编码的字符串发回服务器

Php 将使用htmlentities编码的字符串发回服务器,php,post,html-entities,Php,Post,Html Entities,我在一个视图中生成这个: <form method="post"> <input type="hidden" name="test" value="<?=htmlentities('<>"&ščé', ENT_QUOTES, 'UTF-8')?>"> <input type="submit> </form> 我认为这应该是正确的

我在一个视图中生成这个:

<form method="post">
       <input type="hidden" 
              name="test" 
              value="<?=htmlentities('<>"&ščé', ENT_QUOTES, 'UTF-8')?>">
       <input type="submit>
</form>
我认为这应该是正确的:

$decodedTest = $_POST['test'];
但我没有找到这方面的参考资料


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

您不需要真正的参考,因为打印
htmlspecialchars($\u POST['test'])
(或者只设置
内容类型:text/plain
)将立即显示$\u POST中的数据不是实体编码的


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

发送表单,您可以这样做。最好检查一下

阅读一下“跨站点脚本”。@clime:你可以相信这一点,是的。不幸的是,您可以调用PHP很多东西,但过度指定并不是其中之一,所以AFAIK没有支持这一点的参考。事情就是这样。客户端URL对数据进行编码,使其符合HTTP规范。它如何将数据保存在内存中并不重要(尽管它当然会保持原始数据)。
$decodedTest = $_POST['test'];