PHP не будет urldecode () строка из C ++

Поэтому я отправляю сообщение с одной переменной, это строка в кодировке base64, которая имеет код UrlEncoded.

Когда я отправляю строку через сетевой отладчик Firefox, она работает нормально.
Мне даже не нужен urldecode при использовании отладчика Firefox, это делается автоматически.

НО, когда я отправляю это из моего приложения C ++, это не декодирует вообще.

Строка является строкой Unicode, все мое приложение на C ++ — Unicode.

я имею header("Content-Type: text/html; charset=UTF-8"); в верхней части моей страницы PHP, чтобы убедиться.

Мое приложение php повторяет ответ обратно в приложение c ++.

if($encData = input::get('x')){
echo $encData;
}

Я получаю ответ, но он не расшифрован, даже если я использую urldecode() или же rawurldecode()

Спасибо за любую помощь 🙂

0

Решение

Юникод это не одно. Unicode относится как к стандарту Unicode (блоки символов, которые связаны с блоками кодовых точек), так и к несколько кодировок которые представляют собой кодовые точки для вашего текста.

Есть несколько типов строк. Например, в Windows есть строки «ASCII» и «Wide», следовательно, суффиксы A и W в функциях WinAPI. «ASCII» относится к тому факту, что он использует 8-битный chars в строке, а «Wide» относится (в Windows) к использованию 16-битный shorts для каждого символа в строке. (Другие платформы, такие как Linux, стандартизированы с использованием 32-битных символов для широких строк.)

образец кода, который вы предоставили показывает, что вы используете широкие строки и отправляете их по ссылке. 16-битные строки Windows обычно используют кодировку UCS-2 Unicode (которая очень похожа на UTF-16, но не совпадает с ней), тогда как PHP и стандарт HTTP ожидают 8-битные символы, и по умолчанию PHP ожидает строки UTF-8. Это очевидно в предоставленный вами дамп данных, поскольку он показывает NUL байтов между каждым 8-битным символом. (Вот как выглядит UCS-2 при отправке текста Latin-1.)

Поскольку PHP ожидает UTF-8, а вы отправляете его UCS-2, PHP не может понять текст, и поэтому его urldecode функция ничего не может с этим поделать.

Вам нужно будет преобразовать вашу строку в 8-битную кодировку перед ее отправкой.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]