有问题,parse_str()值被删除,之后其他值根本没有保存 当我使用阿拉伯字符时,这种情况只发生在我身上,它可以正常使用英文单词
这是我的代码
$custom = post('custom');
parse_str(post('custom'), $data);
$email = isset($data['email']) && $data['email'] ? $data['email'] : null;
$address = isset($data['address']) && $data['address'] ? $data['address'] : null;
编辑
数据来自javascript
var formData = $('#form').serialize();
$('.form input[name="custom"]').val(formData);
当我
alert(formData);
我看到数据很好
item_id=1&address=%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85&email=test%40gmail.com
当我尝试在php中调试时
$custom = post('custom');
error_log(print_r($custom,true));
parse_str(post('custom'), $data);
error_log(print_r(post('custom'),true));
我看到数据错误
item_id=1&address=%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%
item_id=1&address==%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%A7%D9%85+%D9%83%D9%84%D8%
我不知道这个问题从哪里来了,是来自serizlize还是parse_str
任何帮助将不胜感激
答案 0 :(得分:1)
由于阿拉伯字符在UTF-8下使用多个字节进行编码,因此您应该使用多字节识别mb_parse_str()
。 (见docs。)
答案 1 :(得分:0)
根据我从parse_str文档中的理解,函数希望字符串是url编码的。
鉴于您的示例,如果您提供正确的数据,则php不是问题(请参阅下面的评论)。考虑一下,如果你正在使用GET,那么url可以被截断超过255个字节,这看起来非常接近你的剪切问题。