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

0

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

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

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

Строка - строка Юникода, мое C++ приложение - все Unicode.

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

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

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

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

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

  • 0
    Вы должны показать свое приложение C ++ тоже;)
  • 0
    Как это отправляется? Если это в параметрах URL или данных POST, PHP автоматически декодирует его.
Показать ещё 7 комментариев
Теги:
utf-8
urlencode

1 ответ

0
Лучший ответ

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

Существует несколько типов строк. Например, в Windows есть строки "ASCII" и "Wide", поэтому суффиксы A и W для функций WinAPI. "ASCII" относится к тому факту, что он использует 8-битный char в строке, а "Wide" ссылается (в Windows) на использование 16-разрядных short s для каждого символа в строке. (Другие платформы, такие как Linux, стандартизированы для использования 32-разрядных символов для широких строк).

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню