Javascript encodeURI возвращает неожиданное значение - PullRequest
0 голосов
/ 16 февраля 2019

У меня проблема с URL-кодированием текста с использованием JavaScript.Я нахожусь в Германии, где у нас есть эти «Umlaute» (ÄÖÜ), и эти буквы создают некоторые проблемы.

Онлайн кодировщик / декодер возвратил следующие результаты для слова «Äpfel» (яблоки).

Äpfel >>> url-кодирование >>>% C3% 84pfel

% C3% 84pfel >>> url-декодирование >>> Äpfel

Для тестирования я создалследующий php.file (poc.php) без php-контента, только javascript:

<script type="text/javascript">
    var t = "Äpfel";
    t = encodeURI(t);
    alert(t);
    t = decodeURI(t);
    alert(t);
</script>

Первое предупреждение возвращает «% EF% BF% BDpfel», что отличается от результата онлайн-кодировщика.

Второе предупреждение возвращает «fpfel» (да, ромб с «?»).

Кажется, что javascript не может декодировать только что закодированный текст.

Я думаю, причина этого поведения где-то в настройках PHP.Когда я просто переименовываю файл из «poc.php» в «poc.html», кодировка верна, и предупреждения возвращают те же результаты, что и онлайн-кодировщик / декодер.

Когда я проверяю текущую кодировку, javascriptи php возвращает "utf-8".

В моем "реальном" проекте у меня есть файл ".js", включенный в мой php-файл (с той же проблемой).

<script type="text/javascript" src="scripts/functions.js"></script>

Кто-нибудь знает, что вызывает такое поведение?

1 Ответ

0 голосов
/ 16 февраля 2019

Странный поток байтов% EF% BF% BD, который вы получаете, является utf-8 версией символа замены Unicode, то есть буквально символом..

Часть Javascript может url-декодироватьтекст, это просто URL-кодированный, его просто попросили закодировать символ для отсутствующего символа.

Итак: некоторая часть вашей системы использует не utf-8, а какой-то другой набор символов, и естьненужное преобразование сделано.Я предполагаю, что файл закодирован в латинском-1, иначе.ISO 8859-1, и PHP пытается прочитать его, как если бы это был UTF-8, преобразуя нераспознанный символ 0xc4 ('Ä' в латинице-1) в символ символа замены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...