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
Что я ожидал
යුනිකෝඩ්
Правило = юникода&действие = создать&Фраза = යුනිකෝඩ්
фактический значение на самом деле «% E0% B6% BA% E0% B7% 94% E0 …»!
URL-адреса должны состоять из подмножества ASCII, они не могут содержать другие «символы Unicode». Ваш браузер может быть настолько хорош, что позволяет вам вводить произвольные символы Юникода и фактически отображать их как символы, но за кулисами значение URL проценты закодированы. Вам придется расшифровать его с rawurldecode
.
Строка запроса автоматически анализируется и декодируется PHP и помещается в $_GET
массив (и $_POST
для тела запроса). Но необработанную строку запроса вам придется самостоятельно анализировать и декодировать.
Кодируйте значение специальными символами.
$token = "a{l@3a3s9a";
rawurlencode($token); //The coding would be "%7Bl%403a3s9a"
Отправьте закодированное значение в базу данных
Получить значение параметра по 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()
Используйте значение, полученное по URL ("a{l@3a3s9a"
)
Эта кодировка будет использоваться для получения специальных символов через сегмент URL.
GL