首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对POST输入编码的PHP

对POST输入编码的PHP
EN

Stack Overflow用户
提问于 2022-08-11 19:28:40
回答 3查看 324关注 0票数 1

我有一个PHP代码,如下所示,在POST调用中,我得到的是加密的值,而不是字符。例如,在输入Hello World'时,我得到了这个Hello World'而不是控制台(from Line Z)上的Hello World'

form_validator.php中,我使用以下内容:

代码语言:javascript
复制
if (isset($_POST["response"]))
    $response = $_POST["response"];
print_r($response);

form.php中,我有以下代码:

代码语言:javascript
复制
<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中,我有以下内容:

代码语言:javascript
复制
$_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

EN

回答 3

Stack Overflow用户

发布于 2022-08-14 18:07:04

问题在您的config.php中,您有以下行:

代码语言:javascript
复制
$_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筛选器(无论如何都不推荐使用)。

票数 8
EN

Stack Overflow用户

发布于 2022-08-21 12:39:19

@Progman的答案是如何解决配置问题,并涵盖您可能希望使用的参数标志。

我想确保人们更好地理解我的原因。

您的字符串在技术上不是加密的,而是被编码的,它已经转换为HTML“安全”等效的--使用HTML字符实体。你可以在这里读到更多关于https://developer.mozilla.org/en-US/docs/Glossary/Entity的内容。

但本质上,“已被转换为HTML实体代码”。思想是,嵌入到HTML文档中已经变得安全了,而不是将其本身解释为HTML,而是简单地将其解释为文本。

这是一个非常类似于转义字符串的概念,只适用于HTML文档和Web浏览器。

所有HTML实体都可以表示为文字或其实体代码。在这种情况下,“可以按照字面意思写为'&#39

大多数脚本语言都具有为您执行这些转换的功能。例如PHP的html_entity_decodehtmlentities函数。

--

PHP框架一些框架将很早就连接到您的$_GLOBALS中,因为请求是第一次收到的,并且对请求数据执行基本的清理处理。如果您正在使用这样的框架,也许这将解释初始编码正在执行的位置。

这里的基本思想可能是,由于通常需要这样的转换来重用请求信息,为什么不确保请求信息在早期被规范化,或者以这样的方式存储在任何数据库中,以保持HTML“安全”。

票数 1
EN

Stack Overflow用户

发布于 2022-08-12 02:14:23

您似乎在序列化输入。在jquery中,在将其发送到php之前。您需要在打印之前对其进行解码。

查看https://www.php.net/manual/en/function.html-entity-decode作为一个起点

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73325995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档