PHP parse_str выводит недопустимые символы - PullRequest
0 голосов
/ 01 июля 2019

Я заметил следующее поведение 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 голосов
/ 01 июля 2019

Значение в кодировке URL %FC выражает байт FC, что в ISO-8859-1 интерпретируется как "ü". json_encode ожидает символов в кодировке UTF-8, и, очевидно, вы тоже, поэтому этот символ отображается неправильно, а json_encode отклоняет его.

Если вы можете изменить, откуда появляется этот URL-адрес, закодируйте URL-код в кодировке UTF-8 , чтобы вы получили %C3%BC. Если вы не можете исправить это там, вам нужно преобразовать проанализированные строки из ISO-8859-1 в UTF-8, используя iconv, mb_convert_encoding или, дерзайте Я говорю, utf8_encode (что почти никогда не подходит, но здесь на этот раз).

...