В настоящее время я работаю над приложением, которое извлекает данные JSON из API сообщества blizzard и анализирует его с помощью PHP. Все работает нормально, пока я не приду к персонажу со специальным персонажем от их имени.
Чтобы вытащить данные символов, мне нужно знать имена их персонажей и область, в которой они включены.
У меня есть имя и область, которые передаются через URL-адрес на страницу символов, и оттуда используют эту информацию, чтобы вытащить символьные данные.
На данный момент мои URL-адреса выглядят так:
http://localhost/guildtree/characters.php?realm=argent-dawn&name=Ankzu
В этот момент, если я попытаюсь вытащить данные для символа с акцентом, я получаю перенаправление на мою страницу с ошибкой, потому что это не допустимый символ.
Только когда я начал переписывать URL, я обнаружил свою проблему. Я перенаправляюсь на страницу с ошибками, потому что где-то вдоль линии специальные символы заменяются на некоторые действительно неуловимые персонажи.
С моими новыми переписанными URL-адресами следующие работы:
http://localhost/guildtree/argent-dawn/ankzu
Однако символ со специальным символом в их имени приводит к сообщению об ошибке.
http://localhost/guildtree/argent-dawn/notúk
Результаты в следующем сообщении об ошибке:
"Не обнаружена
Запрошенный URL / guildtree / argent-dawn / notúk не был найден на этом сервере. "
Поскольку вы можете видеть, что ú заменяется на ú, но когда я копирую и вставляю URL-адрес, ú отображается как% C3% BA
Я понимаю, что причина, по которой ú появляется как º, состоит в том, что два байта unicode ú сбрасываются на два байтовых символа ASCII, в результате чего отображается ú.
Я гарантировал, что все мои страницы имеют следующий заголовок:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Для того, чтобы мое приложение работало правильно, мне нужны эти специальные символы для правильной отображения, поэтому мне нужно, чтобы ú фактически отображался как ú, не отображался как ú, а фактически был ú или% C3% BA.
Имя персонажа вытягивается из URL-адреса просто так:
$charName = $_GET['name'];
Можно ли кодировать $ charName для правильного отображения специальных символов?
Я пробовал все, о чем я мог думать, и искал в Google, но ничего не сработало.
Кроме того, поскольку я использую переписывание URL-адресов, каково было бы правило перезаписи для этих специальных символов?
Вот мое текущее правило перезаписи:
RewriteRule ^([a-zA-Z0-9_'-]+)/([a-zA-Z]+)$ characters.php?realm=$1&name=$2 [NC]
Я знаю, что ([a-zA-Z] +) вообще не допускает специальных символов, в настоящее время я работаю над тем, чтобы специальные символы отображались правильно. Если я использую ([a-zA-Z \ ú] +), он будет работать и отображать страницу так, как она должна отображаться. Добавление \ ú к правилу кажется очень плохим способом сделать это и не всегда работает при использовании соответствующего символа для акцентированных символов.
Любая помощь будет принята с благодарностью. Если вам нужна дополнительная информация, пожалуйста, спросите.
Редактировать:
Изменение моего правила перезаписи на нижеследующее позволяет получить информацию в порядке, но создает цикл переадресации для моего CSS.
RewriteRule ^([a-zA-Z0-9_'-]+)/([^/]+)$ characters.php?realm=$1&name=$2 [NC]
Например, мой CSS перенаправляется на
http://localhost/guildtree/css/error
вместо
http://localhost/guildtree/css/style2.css
Обновить:
Через несколько простых тестов:
$charName = $_GET['name']; $charNameTEST = utf8_encode($charName);
Будет внесено изменение, но когда я применяю это на своей странице, он все еще говорит:
"Не обнаружена
Запрошенный URL / guildtree / argent-dawn / notúk не был найден на этом сервере. "
Я думаю, что главная проблема теперь связана с перенаправлением URL-адресов, потому что данные JSON можно разбирать отлично, когда у них есть акцентированные символы. Я просто не понимаю, почему он продолжает показывать мне, что он находится на панели guildtree / argent-dawn / notúk в браузере, но продолжает пытаться подтянуть / guildtree / argent-dawn / notúk.