Я наконец-то решил эту проблему, спасибо всем за несколько полезных советов (см. Последний абзац этого поста для быстрого ответа).
Я делал что-то неправильно, что мешало.
Я впервые заметил свои проблемы с кодированием, когда записи не записывались в мою базу данных, все базы данных и таблицы были настроены на utf-8, так что оставил php.
Для простоты я создал тестовую страницу php, чтобы продемонстрировать проблему. Поскольку страница получала ($ _GET) значения из URL-адреса, когда я загружал свою тестовую страницу, я делал это с помощью параметра Unicode в URL-адресе test.php? SText = Московский
Проблема для меня, я думаю, заключалась в том, как IE взаимодействовал с URL-адресом, по какой-то причине он не мог декодировать его или распознавать как Unicode. Это стало очевидным, когда я запустил страницу с ошибкой im Chrome, и она отлично работала.
Я начал использовать следующую функцию для вывода полного URL в Chrome и IE
<?php
function curPageURL() {
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
return $pageURL;
}
echo curPageURL();
?>
Internet Explorer 8 повторил следующее:
http://localhost/FirstProject/test.php?sText=??????????
Однако Chrome повторил закодированный URL:
http://localhost/FirstProject/test.php?sText=%D0%9C%D0%BE%D1%81%D0%BA%D0%BE%D0%B2%D1%81%D0%BA%D0%B8%D0%B9
Как вы можете видеть, chrome автоматически кодировал URL-адрес, а PHP автоматически считывал и декодировал его правильно, предположительно, потому что я установил тип содержимого UTF-8 (спасибо Филиппу).
Я все еще не был уверен, почему IE ведет себя так, но это подтолкнуло меня в направлении кодирования URL-адреса на странице вызова. Я звонил на страницу в javascript, поэтому я попробовал функцию encodeURIComponent()
. К счастью, это сработало, и теперь я получаю одинаковый результат в CHROME и IE.
Короче говоря, если я использую encodeURIComponent()
для кодирования вызывающего URL-адреса, я гарантирую, что установил тип содержимого целевой страницы php на header('content-type: text/html; charset=utf-8');
, все переменные URL-адреса Юникода обрабатываются правильно.
Еще раз спасибо за вашу помощь.
Craig