【问题标题】:Problem with greek url characters in IEIE中的希腊url字符问题
【发布时间】:2010-03-01 08:30:30
【问题描述】:

我在我的网站中使用以下脚本来创建分页“下一个-上一个”功能。它实际上是 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>

我不明白代码的哪一部分导致了这个问题。你能帮帮我吗?

【问题讨论】:

    标签: internet-explorer url utf-8


    【解决方案1】:

    htmlentities(implode("&", $newParams));

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

    请改用htmlspecialchars,这样会留下非ASCII字符,只对真正需要编码的内容进行编码。

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

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

    【讨论】:

      【解决方案2】:

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

      转到Modify-&gt;Page Properties 菜单并在对话框中选择Title/Encoding 并在此处选择西欧编码。

      编辑:

      Also try to encode your urls.

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      • 2016-04-02
      相关资源
      最近更新 更多