搜索词末尾的反斜杠会破坏自定义搜索表单

时间:2013-08-20 14:31:16

标签: php wordpress

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

就我而言,提交按钮变成了文本区域。

使用Google Chrome的“检查元素”,我看到我的搜索表单变为:

<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>

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

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

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

2 个答案:

答案 0 :(得分:0)

我做了一些测试,我猜你的问题被误解了,这段代码应该有效:

<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函数以获取额外信息。

解码网址是编码它的对应物,当提交特殊字符时需要对其进行编码,当你想要显示它时,你必须对其进行解码。

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

答案 1 :(得分:0)

我已经尝试过几十次卫生和逃避。但最后,只有preg_replace能够反对这种恼人的反斜杠。