【问题标题】:Backslash at the end of searchword breaks custom search form搜索词末尾的反斜杠会破坏自定义搜索表单
【发布时间】:2013-08-20 14:31:16
【问题描述】:

无意中发现,每当搜索结束时有反斜杠,点击提交后的页面就会返回一个损坏的搜索表单。

在我的例子中,提交按钮变成了一个文本区域。

使用谷歌浏览器的“检查元素”,我看到我的搜索表单变成了这样:

<form method="get" action="">
        <input type="hidden" name="type" value="books">
        <input type="text" name="search" value="\">        <input type="&gt;
    &lt;/form&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=" sidebar"="" class="sidebar widget-area"></form>

以下代码是我的表单。我猜我需要清理/转义输入类型文本中的值?但是为什么esc_attr() 不工作?

<form action="" method="get">
<input type="text" name="search" value="<?php echo esc_attr(stripslashes($_GET['search'])); ?>">
<input type="submit" value="Search">
<input type="checkbox" name="title">
</form>

附:我正在使用此自定义搜索表单来搜索自定义字段并使用 Pods 插件显示生成的自定义帖子类型。不过,这似乎不是 Pods 插件问题。

https://github.com/pods-framework/pods/issues/1620

此外,这似乎与其他主题或插件没有冲突。

【问题讨论】:

  • 当您的数据被发送到您的处理脚本时,您需要对其进行转义。当您单击“搜索”时,向我们展示(在服务器端)调用的脚本。
  • 我将搜索表单与 pods 插件一起使用。数据由它处理,他们坚持认为它被转义了。他们说这可能是一个 wordpress 错误。请参阅我的操作帖子底部的链接。
  • 唯一确定的方法是打开脚本并亲自查看。
  • 我在测试页面上尝试了表单。基本上,该表格是故意不做任何事情的。搜索了一个反斜杠,搜索表单就像我在操作后所说的那样被破坏了。使用默认的 wordpress 二十十三主题完成,未启用任何插件。
  • 我想知道这是一个孤立的案例,还是有其他 wordpress 用户遇到同样的情况?因为我不记得在 wordpress 更新之前遇到过这个问题。

标签: php wordpress


【解决方案1】:

我做了一些测试,我猜你的问题被误解了,这段代码应该可以工作:

<form action="" method="get">
<input type="text" name="search" value="<?php echo urldecode($_GET['search']); ?>">
<input type="submit" value="Search">
<input type="checkbox" name="title">
</form>

您可以查看 php urldecode 函数以获取更多信息。

解码一个url是编码它的对立面,当一个特殊字符被提交时,它需要被编码,当你想显示它时,你必须对其进行解码。

编辑:
提交表单后,在处理其值时,您必须使用 esc_attr(stripslashes($_GET['search'])) 以便对值进行编码并避免 sql-injections 和其他格式问题,这同样有发生在处理表单的 php 文件中,通常在 if ($_GET) 语句之后。

【讨论】:

  • 很抱歉,它不起作用。反斜杠仍然会破坏搜索表单,将提交按钮变成文本区域。 =( 使用默认 wordpress 二十十三主题完成,未启用插件。
  • 你能回声一下 $_GT['search']; ?然后在 urldecode 中回显它?并在此处粘贴结果?
  • 好的,所以如果我搜索反斜杠 \,echo $_GET['search'];echo urldecode($_GET['search']); 将分别得到 \\ 和 \\。
  • 这表示在提交值的时候没有对值进行编码。您需要在提交表单时清理文本输入的值,而不是在加载 html 时, echo $_GET['search'] 必须为 \ 输出 %5C 所以提交表单时代码有问题
  • 但是我该如何消毒呢?现在我很困惑。我试过 `sanitize_text_field($_GET['search'])' 没有成功。
【解决方案2】:

我已经尝试了几十次卫生和逃生。但最后,只有 preg_replace 对那个烦人的反斜杠起作用了。

【讨论】:

    猜你喜欢
    • 2018-05-30
    • 2021-02-14
    • 1970-01-01
    • 2014-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    相关资源
    最近更新 更多