为utf-8单词剪切parse_str()值

时间:2016-03-28 21:36:26

标签: php post

有问题,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

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

由于阿拉伯字符在UTF-8下使用多个字节进行编码,因此您应该使用多字节识别mb_parse_str()。 (见docs。)

答案 1 :(得分:0)

根据我从parse_str文档中的理解,函数希望字符串是url编码的。

鉴于您的示例,如果您提供正确的数据,则php不是问题(请参阅下面的评论)。考虑一下,如果你正在使用GET,那么url可以被截断超过255个字节,这看起来非常接近你的剪切问题。