我有一个通过 PHP 将内容发布到 MySQL 数据库的应用程序。PHP 使用 $_GET 从 URL 中提取内容,然后将其插入数据库。
这很好用,但我发现了一个问题。如果用户输入某些字符("、& 和其他字符),$_GET 方法不会正确地将内容与 URL 分开。
假设用户发布了以下内容:我喜欢蓝色和绿色
在这种情况下,& 符号会切断单词 blue 之后的字符串。
有什么方法可以让我编辑我的 PHP 文件以忽略 & 符号并将其实际视为应该 $_GET 的变量的一部分?任何帮助都会很棒!
我有一个通过 PHP 将内容发布到 MySQL 数据库的应用程序。PHP 使用 $_GET 从 URL 中提取内容,然后将其插入数据库。
这很好用,但我发现了一个问题。如果用户输入某些字符("、& 和其他字符),$_GET 方法不会正确地将内容与 URL 分开。
假设用户发布了以下内容:我喜欢蓝色和绿色
在这种情况下,& 符号会切断单词 blue 之后的字符串。
有什么方法可以让我编辑我的 PHP 文件以忽略 & 符号并将其实际视为应该 $_GET 的变量的一部分?任何帮助都会很棒!
您可以在将数据发送到 PHP 之前对其进行 URLencode。这是一个更好的解决方案。
如果特殊字符在数据中,则不得在查询字符串中使用这些字符。
在 Javascript 中,您可以使用以下escape
函数:escape(&ee)
将给出%26ee
正确的方法是客户端对“&”字符进行urlencode:传递“%26”而不是“&”
那么,在创建查询字符串之前,对其进行编码呢?
$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
您可以使用$_SERVER['QUERY_STRING']
您可以将请求作为 base64 编码字符串发送:
$string = base64_encode("This is my long string with &ersands and 'quotes'");
print base64_decode($string);
请注意,base64 编码的数据比原始数据多占用大约 33% 的空间。
来自手册: http: //php.net/manual/en/function.base64-encode.php
你也有urlencode
在将字符串作为 GET 参数传递之前,您必须对字符串进行URL 编码。在这种特殊情况下,您必须将&符号替换为%26。
例如,这可以在您发送表单之前使用 javascript 来完成。