无意中,我发现只要搜索结束时出现反斜杠,点击提交后的页面就会返回一个损坏的搜索表单。
就我而言,提交按钮变成了文本区域。
使用Google Chrome的“检查元素”,我看到我的搜索表单变为:
<form method="get" action="">
<input type="hidden" name="type" value="books">
<input type="text" name="search" value="\"> <input type=">
</form>
</div></div></div><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 :(得分: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能够反对这种恼人的反斜杠。