为什么 PHP 不处理包含&符号“&”的 $_POST 数据

我在 PHP 中遇到了 POST 数据的奇怪问题。每当 POST 数据包含“&”(和号字符)时,它的行为就会非常奇怪。请看下面的例子。


由远程端发布并使用接收的数据file_put_contents(file_get_contents('php://input'));


csv=0,"ITEM 1"

1,"ITEM 2&CO"

2,"ITEM 3"

当我这样做时,file_put_contents('file.txt', $_POST['csv']);我将此截断的输出到本地文件(请注意,它缺少双 qoutes 并且文件此时结束):


0,"ITEM 1"

1,"ITEM 2

当我这样做时,file_put_contents('file.txt', print_r($_POST['csv'], true));这次文本被奇怪地修改了,&符号被换行符、3个制表符和括号替换:


[csv] => 0,"ITEM 1"

1,"ITEM 2

            [CO,"

2,"ITEM 3"

我不知道为什么会这样,因为我认为 $_POST 没有以任何方式改变。但显然它是。提前感谢您提供任何提示或想法,为什么会发生这种情况以及如何访问 $_POST['csv'] 以便它不会被修改。


PS:我认为应该没关系,但我只会提到使用的网络服务器是nginx。


素胚勾勒不出你
浏览 152回答 1
1回答

GCT1015

似乎您正在尝试将 csv 文件作为 url 编码数据发送,而无需对数据进行 url 编码。& 是分隔变量的特殊字符。正确的数据应该是csv=0%2C%22ITEM%201%22%0A1%2C%22ITEM%202%26CO%22%0A2%2C%22ITEM%203%22%26是 & 编码的。这些数据从哪里发布,需要在发送数据之前对数据进行 url 编码。
打开App,查看更多内容
随时随地看视频慕课网APP