IE中的希腊网址字符问题

时间:2010-03-01 08:30:30

标签: internet-explorer url utf-8

我在我的网站上使用以下脚本来创建分页“next-previous”功能。这实际上是Dreamweaver的代码。该脚本使用url获取一些值,然后重新创建它。 IE7和IE8中的结果URL包含不可读的字符,最后页面无法正常工作。

    $queryString_met = "";
    if (!empty($_SERVER['QUERY_STRING'])) {
      $params = explode("&", $_SERVER['QUERY_STRING']);
      $newParams = array();
      foreach ($params as $param) {
        if (stristr($param, "pageNum_met") == false && 
            stristr($param, "totalRows_met") == false) {
          array_push($newParams, $param);
        }
      }
      if (count($newParams) != 0) {
        $queryString_met = "&" . htmlentities(implode("&", $newParams));
      }
    }
    $queryString_met = sprintf("&totalRows_met=%d%s", $totalRows_met, $queryString_met);

........

<a href="<?php printf("%s?pageNum_met=%d%s", $currentPage, max(0, $pageNum_met - 1), $queryString_met); ?>"> << </a>

我不明白代码的哪一部分对此问题负责。你能帮我吗?

2 个答案:

答案 0 :(得分:2)

  

htmlentities(implode(“&amp;”,$ newParams));

htmlentities对字符串中的所有非ASCII字节进行编码,通常是不必要的,如果你没有指定charset参数,猜测你的字符串是在ISO-8859-1中,希腊他们绝对不会。 (希望您在网站上使用UTF-8。)

使用htmlspecialchars代替,这将保留非ASCII字符,只编码真正必须编码的内容。

但是,要成为一个问题,您必须直接在URL中使用非ASCII字符。这真的不可靠;别。未编码的非ASCII字符在URI中根本无效;它们必须% - 编码(例如,使用urlencode)。 IRI允许非ASCII字符,浏览器可以自动UTF-8编码和%-encode将它们转换成URI,但IE不会(总是)这样做。

[对于包含目标名称的任何值,处理查询字符串的脚本也将失败,而不仅仅是那些以它们开头的名称。]

答案 1 :(得分:1)

我认为您需要在Dreamweaver中为该页面选择文档编码:

转到Modify->Page Properties菜单,然后在对话框中选择Title/Encoding,然后选择西欧编码。

修改

<强> Also try to encode your urls.