简体   繁体   English

urlencode Internet Explorer问题

[英]urlencode internet explorer problem

I am having a strange problem with Internet Explorer and greek encoded get variables. 我在Internet Explorer和希腊编码的get变量中遇到一个奇怪的问题。 I have a simple script (utf-8 encoded) in php that does the following: 我在php中有一个简单的脚本(经utf-8编码),可以执行以下操作:

$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>';

I call the script the usual way: http://localhost/form.php?term =διαστημοπλοιο. 我以通常的方式称呼脚本: http://localhost/form.php?term =διαστημοπλοιο。 Now while in chrome, firefox (mac), safari (mac) the value gets ok (it will display %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 - percent utf-8 encoded), in Internet Explorer 8+ (windows) I get garbled text (empty squares). 现在在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+(Windows)中,我得到了乱码的文本(空白方块)。 Is there something I should check? 我应该检查些什么吗? I used mb_detect_encoding and the string is UTF-8 encoded. 我使用了mb_detect_encoding,并且该字符串是UTF-8编码的。

I've also used the following tests (php code below) and there are differences between browsers: 我还使用了以下测试(以下php代码),并且浏览器之间存在差异:

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 "</pre>";

The results on mac/linux were: 在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

The results on IE were: 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:

You need htmlspecialchars() , not urlencode() . 您需要htmlspecialchars() ,而不是urlencode() Not using htmlspecialchars leads to XSS vulnerabilities. 不使用htmlspecialchars会导致XSS漏洞。

echo '<input type="hidden" name="ref" value="'.htmlspecialchars($term).'">';

Also, the values in $_GET are already decoded. 同样, $_GET中的值已经被解码。 You must not decode them again. 您不得再次对其进行解码。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM