PHP parse_str输出无效字符

时间:2019-07-01 08:46:22

标签: php json string parsing

我注意到parse_str的以下行为。

我有一串url参数,例如:

"cat=sphd&bpmin=100&bpmax=500&xf=1229_Nackenb%FCgel%7E1231_Bluetooth%7E1999_Sony"

如果我执行parse_str,则包含无效字符的最后一个参数如下所示:

        [params] => Array
            (
                [cat] => sphd
                [bpmin] => 100
                [bpmax] => 500
                [xf] => 1229_Nackenb�gel~1231_Bluetooth~1999_Sony

基本上json_encode失败的地方:我需要它来进行缓存(在框架下)。

问题:如何json_encode用这样的字符组成数组或如何将parse_str的输出更正为json_encode

谢谢。

1 个答案:

答案 0 :(得分:0)

URL编码的值%FC表示 byte FC,在ISO-8859-1中解释为“ü”。 json_encode期望使用UTF-8编码的字符,而且您显然也是这样,这就是为什么此字符无法正确显示并且json_encode拒绝它的原因。

如果您可以更改该URL的出现位置,请对 UTF-8编码字符进行URL编码,以便获得%C3%BC。如果您无法在此处进行修复,则需要使用iconvmb_convert_encoding或敢于utf8_encode将已解析的字符串从ISO-8859-1转换为UTF-8。 (这几乎是不合适的,但是这里只是一次)。