Поэтому я отправляю сообщение с одной переменной, это строка в кодировке 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()
Спасибо за любую помощь 🙂
Юникод это не одно. Unicode относится как к стандарту Unicode (блоки символов, которые связаны с блоками кодовых точек), так и к несколько кодировок которые представляют собой кодовые точки для вашего текста.
Есть несколько типов строк. Например, в Windows есть строки «ASCII» и «Wide», следовательно, суффиксы A и W в функциях WinAPI. «ASCII» относится к тому факту, что он использует 8-битный char
s в строке, а «Wide» относится (в Windows) к использованию 16-битный short
s для каждого символа в строке. (Другие платформы, такие как 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-битную кодировку перед ее отправкой.
Других решений пока нет …