$ _SERVER [‘QUERY_STRING’] не печатает значения Unicode, как есть

http://localhost/fw/api/fw_api.php?rule=unicode&action=create&phrase=යුනිකෝඩ්

Я обращаюсь к вышеупомянутому URL. В fw_api.phpкогда я повторяю $_SERVER['QUERY_STRING'] он не дает фактического значения значения моей фразы Unicode «යුනිකෝඩ්», как в URL. Есть ли какое-то решение для этого, или я делаю / ожидаю что-то здесь не так? Нужна помощь.

header ('Content-type: text/html; charset=utf-8');
echo $_GET['phrase'];
echo $_SERVER['QUERY_STRING'];
die;

Фактический результат:

යුනිකෝඩ්

Правило = юникода&действие = создать&Фраза =% E0% B6% BA% E0% B7% 94% E0% B6% B1% E0% B7% 92% E0% B6% 9A% E0% B7% 9D% E0% B6% A9% E0% B7% 8A

Что я ожидал

යුනිකෝඩ්

Правило = юникода&действие = создать&Фраза = යුනිකෝඩ්

0

Решение

фактический значение на самом деле «% E0% B6% BA% E0% B7% 94% E0 …»!

URL-адреса должны состоять из подмножества ASCII, они не могут содержать другие «символы Unicode». Ваш браузер может быть настолько хорош, что позволяет вам вводить произвольные символы Юникода и фактически отображать их как символы, но за кулисами значение URL проценты закодированы. Вам придется расшифровать его с rawurldecode.

Строка запроса автоматически анализируется и декодируется PHP и помещается в $_GET массив (и $_POST для тела запроса). Но необработанную строку запроса вам придется самостоятельно анализировать и декодировать.

5

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

  1. Кодируйте значение специальными символами.

    $token = "a{l@3a3s9a";
    rawurlencode($token);   //The coding would be "%7Bl%403a3s9a"
  2. Отправьте закодированное значение в базу данных

  3. Получить значение параметра по URL

    $body = file_get_contents("php://input");
    if ($body == null && isset($_SERVER['QUERY_STRING'])) {
    parse_str($_SERVER['QUERY_STRING'], $this->parameters);
    return;
    }
    

    Значения параметров автоматически декодируются с parse_str () без необходимости использовать rawurldecode()

  4. Используйте значение, полученное по URL ("a{l@3a3s9a")

Эта кодировка будет использоваться для получения специальных символов через сегмент URL.

GL

0

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