2013-08-20 51 views
2

我意外地发现,每当搜索结束时出现反斜线,点击提交后的页面将返回一个破损的搜索表单。搜索词末尾的反斜杠打破自定义搜索表单

在我的情况下,提交按钮变成了文本区域。

使用谷歌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

而且,这并不似乎是来自另一个主题或插件冲突。

+0

当数据发送到您的处理脚本时,您需要转义您的数据。当您点击“搜索”时,向我们展示获取调用的脚本(在服务器端)。 – user1477388

+0

我使用搜索表单和pod插件一起使用。数据由它处理,他们坚持认为它已被转义。他们说这可能是一个WordPress的错误。请参阅我的操作文章底部的链接。 –

+0

只有知道的方法才能打开脚本并亲自查看。 – user1477388

回答

0

我已经尝试过几十次卫生和逃逸。但最后,只有preg_replace对付那个恼人的反斜杠。

0

我做了一些测试,我猜你的问题是missunderstood,此代码应工作:

<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进行解码是对它进行编码的反作用,当一个特殊字符需要被编码时,当你想要显示它时,你必须对它进行解码。

编辑:
提交表单之后,当它的值被处理,则必须以使该值成为编码和SQL的注射剂以及其它使用esc_attr(的stripslashes($ _ GET [“搜索”]))格式问题可以避免,同样这也必须发生在处理表单的php文件中,通常在if($ _GET)语句之后。

+0

对不起,但没有奏效。反斜杠仍然会打破搜索表单,将提交按钮变为文本区域。=( 完成默认wordpress二十三个主题,没有启用插件 –

+0

你可以创建$ _GT ['search'];?然后在urldecode里面回显它的回声并粘贴这里的结果吗? –

+0

好的,所以如果我搜索一个反斜杠\,'echo $ _GET ['search'];'和 'echo urldecode($ _ GET ['search']);'将得到\\和\\ –