Декодирование XML с помощью base64_decode прекрасно работает в PHPUnit, но возвращает данные в кодировке UTF-16 в браузере - PullRequest
0 голосов
/ 20 июля 2010

У меня возникли некоторые странные проблемы с декодированием фрагмента XML, содержащегося в cookie, с помощью функции PHP base64_decode :

  1. В наших тестах PHPUnit мы можем декодироватьXML и выводит его на консоль, и он печатает XML, как и следовало ожидать (все модульные тесты также проходят).
  2. Как только мы попробуем запустить тот же код в браузере, декодированный XMLкажется, содержит множество символов UTF-16, вкрапленных фрагментами ожидаемых тегов XML.Например:

    объявление и корневой узел - это тег ... .

  3. Я проверил кодировку символов обслуживаемой страницы и убедился, что это UTF-8.
  4. Разрабатываемый сайт использует Drupal
  5. Мы пытались передать строку XML / UTF-16 через функцию Drupal drupal_convert_to_utf8 , но это просто возвращает китайские (я думаю) символы, например, 敲

1 Ответ

1 голос
/ 20 июля 2010

Aha!Оказывается, что при запуске в браузере значения cookie автоматически URL декодировались PHP, что означало, что любые '+' в кодированном base64 тексте заменялись пробелами.Добавление этой строки кода перед вызовом base64_decode исправленных вещей:

$tmp = str_replace(' ', '+', $value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...