У меня странная проблема с Internet Explorer и греческими переменными get. У меня есть простой скрипт (в кодировке utf-8) в php, который делает следующее:
$term = $_GET['term'];
// term processing
echo htmlspecialchars($term);
echo '<form method="GET" action="/script.php">';
echo '<input type="hidden" name="ref" value="'.$term.'">';
echo '<input type='submit' value="do submit()">';
echo '</form>';
Я называю сценарий обычным способом: http://localhost/form.php?term=διαστημοπλοιο.
Теперь в Chrome, Firefox (Mac), Safari (Mac) значение становится нормальным (оно будет отображать% CE% B4% CE% B9% CE% B1% CF% 83% CF% 84% CE% B7% CE% BC % CE% BF% CF% 80% CE% BB% CE% BF% CE% B9% CE% BF - процентное кодирование utf-8), в Internet Explorer 8+ (окна) я получаю искаженный текст (пустые квадраты). Есть что-то, что я должен проверить? Я использовал mb_detect_encoding и строка в кодировке UTF-8.
Я также использовал следующие тесты (код php ниже), и между браузерами есть различия:
<code>header("Content-type:text/html;charset=utf-8");
$term = $_GET['term'];
echo "<pre>";
echo "DECODED:".urldecode($term)."\n";
echo "TERM ENCODING (FROM BROWSER) [mb_detect_encoding]:".mb_detect_encoding($term)."\n";
echo "UTF-8:\n";
echo 'URLDECODE:'."\t".urlencode($term)."\n";
echo 'RAWURLDECODE:'."\t".rawurlencode($term)."\n";
echo 'URLDECODE:'."\t".urldecode(utf8_encode(urlencode($term)))."\n";
echo 'RAWURLDECODE:'."\t".rawurlencode($term)."\n";
echo "UTF-8->cp1253 iv:\n";
$zz = iconv('UTF-8','cp1253',$term);
echo 'URLDECODE:'."\t".urlencode(iconv('UTF-8','cp1253',$term))."\n";
echo "cp1253->UTF-8 iv:\n";
echo 'URLDECODE:'."\t".urlencode(iconv('cp1253','UTF-8',$zz))."\n";
echo "
";
Результаты для Mac / Linux были:
DECODED:διαστημοπλοιο
TERM ENCODING (FROM BROWSER) [mb_detect_encoding]:UTF-8
UTF-8:
URLDECODE: %CE%B4%CE%B9%CE%B1%CF%83%CF%84%CE%B7%CE%BC%CE%BF%CF%80%CE%BB%CE%BF%CE%B9%CE%BF
RAWURLDECODE: %CE%B4%CE%B9%CE%B1%CF%83%CF%84%CE%B7%CE%BC%CE%BF%CF%80%CE%BB%CE%BF%CE%B9%CE%BF
URLDECODE: διαστημοπλοιο
RAWURLDECODE: %CE%B4%CE%B9%CE%B1%CF%83%CF%84%CE%B7%CE%BC%CE%BF%CF%80%CE%BB%CE%BF%CE%B9%CE%BF
UTF-8->cp1253 iv:
URLDECODE: %E4%E9%E1%F3%F4%E7%EC%EF%F0%EB%EF%E9%EF
cp1253->UTF-8 iv:
URLDECODE: %CE%B4%CE%B9%CE%B1%CF%83%CF%84%CE%B7%CE%BC%CE%BF%CF%80%CE%BB%CE%BF%CE%B9%CE%BF
Результаты по IE были:
DECODED:�������������
TERM ENCODING (FROM BROWSER) [mb_detect_encoding]:UTF-8
UTF-8:
URLDECODE: %E4%E9%E1%F3%F4%E7%EC%EF%F0%EB%EF%E9%EF
RAWURLDECODE: %E4%E9%E1%F3%F4%E7%EC%EF%F0%EB%EF%E9%EF
URLDECODE: �������������
RAWURLDECODE: %E4%E9%E1%F3%F4%E7%EC%EF%F0%EB%EF%E9%EF
UTF-8->cp1253 iv:
Notice: iconv() [function.iconv]: Detected an illegal character in input string in /Users/xalapan/Sites/drupal/io.php on line 15
Notice: iconv() [function.iconv]: Detected an illegal character in input string in /Users/xalapan/Sites/drupal/io.php on line 16
URLDECODE:
cp1253->UTF-8 iv:
URLDECODE: