2

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

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

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

在这种情况下,& 符号会切断单词 blue 之后的字符串。

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

4

7 回答 7

6

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

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

于 2013-08-13T08:33:47.783 回答
2

正确的方法是客户端对“&”字符进行urlencode:传递“%26”而不是“&”

于 2013-08-13T08:34:21.413 回答
1

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

$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
于 2013-08-13T08:38:43.107 回答
1

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

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

于 2013-08-13T08:31:18.047 回答
1

您可以将请求作为 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

于 2013-08-13T08:33:46.153 回答
1

尝试对您的字符串进行urlencode:

&

变成

%26

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

于 2013-08-13T08:34:48.147 回答
0

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

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

于 2013-08-13T08:47:22.303 回答