2

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

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

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

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

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

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

此外,这似乎不是来自另一个主题或插件的冲突。

4

2 回答 2

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

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

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

于 2013-08-22T07:17:01.900 回答
0

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

于 2013-08-26T17:53:24.277 回答