Проблема с греческими символами URL в IE - PullRequest
0 голосов
/ 01 марта 2010

Я использую следующий скрипт на своем веб-сайте для создания пагинации «next-previous». На самом деле это код Dreamweaver. Сценарий использует URL для получения некоторых значений, а затем создает его заново. URL-адрес результата в IE7 и IE8 содержит нечитаемые символы, и в конце страница работает неправильно.

    $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 ]

2 голосов
/ 01 марта 2010

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

htmlentities кодирует все байты, не входящие в ASCII, в вашей строке, обычно без необходимости, и, если вы не укажете аргумент charset, предположите, что ваши строки соответствуют ISO-8859-1, что для греческого языка они определенно выиграли не быть (Надеюсь, вы используете UTF-8 для всего на вашем сайте.)

Вместо этого используйте htmlspecialchars, который оставит не-ASCII-символы в покое и закодирует только то, что действительно должно быть закодировано.

Однако, чтобы это вообще было проблемой, вы должны использовать не-ASCII символы прямо в вашем URL. Это действительно ненадежно; нет. Незакодированные символы не ASCII вообще недопустимы в URI; они должны быть % -кодированы (например, с использованием urlencode). IRI допускают символы не ASCII, которые браузеры могут автоматически кодировать в UTF-8 и% -encode, чтобы превратить их в URI, но IE не (всегда) делает это.

[Также скрипт для обработки строки запроса не будет работать для любого значения , содержащего целевые имена, а не только те, которые начинаются с них.]

1 голос
/ 01 марта 2010

Я думаю, вам нужно выбрать кодировку документа для этой страницы в Dreamweaver:

Перейдите в меню Modify->Page Properties и в диалоговом окне выберите Title/Encoding и выберите кодировку Западноевропейский .

Edit:

Также попробуйте закодировать ваши URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...