治疗&;作为带有$_GET的普通字符


Treating & as normal character with $_GET

我有一个通过PHP将内容发布到MySQL数据库的应用程序。PHP使用$_GET从URL中提取内容,然后将其插入到DB中。

这很有效,但我发现了一个问题。如果用户输入某些字符("、&和其他字符),$_GET方法不会正确地将内容与URL分离。

假设用户发布以下内容:我喜欢蓝色&绿色

在这种情况下;symbol将单词blue后面的字符串剪切。

有什么方法可以让我编辑我的PHP文件来忽略&符号,并将其视为变量的一部分,它应该是$_GET?任何帮助都会很棒!

您可以在将数据发送到PHP之前对其进行URLcode。这是一个更好的解决方案
如果特殊字符在数据中,则不能在查询字符串中使用这些字符。

在Javascript中,您可以使用escape函数:escape(&ee)将给%26ee

正确的方法是由客户端对"&"字符进行URL编码:传递"%26"而不是"&"

您可以使用$_SERVER['QUERY_STRING']

来自http://php.net/manual/en/reserved.variables.server.php

您可以将请求作为base64编码的字符串发送:

$string = base64_encode("This is my long string with &ampersands and 'quotes'");
print base64_decode($string);

请注意,base64编码的数据比原始数据占用大约33%的空间。

根据手册:http://php.net/manual/en/function.base64-encode.php

您还拥有urlencode

尝试对字符串进行url编码:

&

成为

%26

它是一个PHP函数:http://php.net/manual/fr/function.urlencode.php

在创建查询字符串之前,对其进行编码怎么样?

$str = "I love blue & green ?=&˙Đ[]";
$str = urlencode($str);
echo $str;

将返回:

I%20love%20blue%20%26%20green%20%3F%3D%26%CB%99%C4%90%5B%5D

在将字符串作为GET参数传递之前,必须对其进行URL编码。在这种特殊情况下,您必须替换&带有%26的符号。

例如,这可以在发送表单之前使用javascript来完成。