我有一个PHP代码,如下所示,在POST调用中,我得到的是加密的值,而不是字符。例如,在输入Hello World'时,我得到了这个Hello World';而不是控制台(from Line Z)上的Hello World'。
在form_validator.php中,我使用以下内容:
if (isset($_POST["response"]))
$response = $_POST["response"];
print_r($response);在form.php中,我有以下代码:
<form id="acbdef" name="abcdef" action="#" method="post">
<table width="100%" class="wb-tables table">
<tr>
<td>
<?php echo SECRET_RESPONSE;?>:
</td>
<td colspan="2"><input type="text" id="response" name="response" value="" /></td>
</tr>
</table>
</form>
<script>
// Test all the fields in another php page using javax and receive the result by JSON
$("#save").click(function () {
$.post('form_validator.php', $("#abcdef").serialize(), function (data) {
console.log(data); // Line Z
});// end function(data)
});
</script>在config.php中,我有以下内容:
$_GET = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
$_REQUEST = (array) $_POST + (array) $_GET + (array) $_REQUEST;问题陈述:
我想知道我需要在上面的php代码中做什么修改,这样它才能使用character itself而不是HTML coded apostrophe。
发布于 2022-08-14 18:07:04
问题在您的config.php中,您有以下行:
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);这将在输入中编码单引号和双引号,如消毒过滤器章中所定义的那样。
FILTER_SANITIZE_STRING条形标签和HTML-编码双引号和单引号,可选择剥离或编码特殊字符.可以通过设置FILTER_FLAG_NO_ENCODE_QUOTES禁用编码引号。(在PHP8.1.0中不推荐使用htmlspecialchars()。)
如果不希望在各自的HTML编码字符串中转换任何单引号或双引号,则使用标志FILTER_FLAG_NO_ENCODE_QUOTES或不使用FILTER_SANITIZE_STRING筛选器(无论如何都不推荐使用)。
发布于 2022-08-21 12:39:19
@Progman的答案是如何解决配置问题,并涵盖您可能希望使用的参数标志。
我想确保人们更好地理解我的原因。
您的字符串在技术上不是加密的,而是被编码的,它已经转换为HTML“安全”等效的--使用HTML字符实体。你可以在这里读到更多关于https://developer.mozilla.org/en-US/docs/Glossary/Entity的内容。
但本质上,“已被转换为HTML实体代码”。思想是,嵌入到HTML文档中已经变得安全了,而不是将其本身解释为HTML,而是简单地将其解释为文本。
这是一个非常类似于转义字符串的概念,只适用于HTML文档和Web浏览器。
所有HTML实体都可以表示为文字或其实体代码。在这种情况下,“可以按照字面意思写为'或'。
大多数脚本语言都具有为您执行这些转换的功能。例如PHP的html_entity_decode和htmlentities函数。
--
PHP框架一些框架将很早就连接到您的$_GLOBALS中,因为请求是第一次收到的,并且对请求数据执行基本的清理处理。如果您正在使用这样的框架,也许这将解释初始编码正在执行的位置。
这里的基本思想可能是,由于通常需要这样的转换来重用请求信息,为什么不确保请求信息在早期被规范化,或者以这样的方式存储在任何数据库中,以保持HTML“安全”。
发布于 2022-08-12 02:14:23
您似乎在序列化输入。在jquery中,在将其发送到php之前。您需要在打印之前对其进行解码。
查看https://www.php.net/manual/en/function.html-entity-decode作为一个起点
https://stackoverflow.com/questions/73325995
复制相似问题