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


Backslash at the end of searchword breaks custom search form

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

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

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

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

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

此外,这似乎与另一个主题或插件没有冲突。

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

<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(stripseashes($_GET['search'])),以便对值进行编码,避免sql注入和其他格式问题,同样,这必须发生在处理表单的php文件中,通常在if($_GET)语句之后。

我试过几十次卫生和逃生。但最终,只有preg_replace能对付那个烦人的反斜杠。