2010-03-01 185 views
0

我在我的網站中使用以下腳本來創建分頁「下一個上一個」功能。這實際上是一個Dreamweaver的代碼。腳本使用url獲取一些值,然後重新創建它。 IE7和IE8中的結果URL包含不可讀的字符,最後頁面無法正常工作。IE中希臘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

ヶ輛(破滅( 「&」,$ newParams));

htmlentities編碼所有非ASCII字節字符串中的,通常是不必要的,而且,如果不指定charset的說法,猜測你的字符串是ISO-8859-1,這對於希臘的他們肯定贏」不要。 (希望你的網站上的所有東西都使用UTF-8編碼。)

改爲使用htmlspecialchars,這樣會保留非ASCII字符,並且只編碼真正需要編碼的內容。

但是,這是一個問題,你必須直接在你的URL中使用非ASCII字符。這真的不可靠;別。未編碼的非ASCII字符在URI中根本無效;它們必須是%編碼的(例如使用urlencode)。 IRI允許使用非ASCII字符,這些瀏覽器可以自動使用UTF-8編碼和%-encode將它們轉換爲URI,但IE不會(總是)這樣做。

[也處理查詢字符串中的腳本將失敗包含目標的名字,而不僅僅是那些與他們在開始任何價值]

1

我認爲你需要選擇在Dreamweaver該頁面的文檔編碼:

轉到Modify->Page Properties菜單和對話框中選擇Title/Encoding並選擇西歐編碼存在。

編輯:

Also try to encode your urls.

+0

@Sarfraz感謝您的回答。我的頁面也包含希臘字符,而且我的數據庫使用的是utf-8編碼,因此將頁面的編碼轉換爲西歐文件會導致很多其他問題。這是解決這個問題的唯一方法嗎? – zekia 2010-03-01 08:55:53

+0

@ktsixit:不,這不是唯一的解決方案,嘗試編碼你的網址,看到我更新的答案PLZ。 – Sarfraz 2010-03-01 09:06:44

+0

我嘗試以下,但不幸的是它不能正常工作:  <<  有什麼建議嗎? – zekia 2010-03-01 09:35:44