+'&引用;在php GET搜索表单中消失

+'&引用;在php GET搜索表单中消失,php,forms,input,sanitization,Php,Forms,Input,Sanitization,我有一张搜索表。我使用下面的行来获取值。返回时,它会将加号替换为空格,删除单引号/双引号后的字母。我想让用户能够搜索他们想要的关键字。如何允许显示这些字母 $title = trim(filter_input(INPUT_GET, 'title', FILTER_SANITIZE_SPECIAL_CHARS)); 当我用GET发送时 header("Location:http://site.org/search/?title=$title"); 我尝试使用urlencode()并对加号有效,

我有一张搜索表。我使用下面的行来获取值。返回时,它会将加号替换为空格,删除单引号/双引号后的字母。我想让用户能够搜索他们想要的关键字。如何允许显示这些字母

$title = trim(filter_input(INPUT_GET, 'title', FILTER_SANITIZE_SPECIAL_CHARS));
当我用GET发送时

header("Location:http://site.org/search/?title=$title");
我尝试使用urlencode()并对加号有效,但对引号无效。例如,c“s将返回c”s


谢谢。

这些是特殊字符,对应于它们的外观,例如GET请求中的加号对应于空格

请看


在重定向之前,必须替换这些字符。您可以使用过滤器\消毒\特殊\字符手册中的
urlencode

来执行此操作

HTML转义“'”和ASCII值小于32的字符, 可选地对其他特殊字符进行剥离或编码


如果您尝试输入的字符的ascii值低于32,则可能需要使用不同的路径。

您需要对输出到的介质的数据进行编码/转义:

  • 使用
    url\u encode
    通过url发送变量
  • 使用带有绑定变量的准备语句查询数据库,这样可以避免sql注入,并且可以在数据库中搜索带引号的文本
  • 使用
    htmlspecialchars
    将结果输出到html或类似
    json\u encode
    的内容,将其发送到javascript

为什么需要更改引号?如果在url中发送,则
urlencode
将只对需要编码的字符进行编码。我想让它搜索可能包含单个引号或撇号的书籍标题记录。我明白了。我尝试了
标题(“位置:http://site.org/search/?title=“.urlencode($title)。”它适用于加号。单引号显示在中。双引号带其余的字母,我不能得到单引号匹配的搜索结果。url被编码为+到%2B,但单引号保持为“.”当我运行
urlencode(“”)
时,我将
%22
作为输出,而
urlencode(“”)
outputs
%27
我在回显时也获得了该输出,但它没有显示在上面的url上。单引号显示
…org/?title='
对于加号,它显示%2B。如果我运行此命令:
标题(“Location:index.php?a=“.urlencode(”));
,它将我带到带有适当变量的索引页:
index.php?a=%27
。对,这很有意义。引号正在被删除。