2009-12-29 79 views
2

我在我的挪威網站上使用jQuery的自動完成功能。當輸入挪威字符æ,ø和å時,自動完成功能會建議具有相應字符的單詞,但不要以相應字符開頭的單詞。似乎我必須設法在單詞中間對挪威字符進行字符編碼,而不是以字母開頭的字符。jQuery自動完成特殊字符(挪威語)問題

我正在使用PHP腳本和我自己的函數將挪威語字符編碼爲UTF-8並生成自動完成列表。

這真令人沮喪!

代碼:

PHP代碼:

$q = strtolower($_REQUEST["q"]); 
if (!$q) return; 

function rewrite($string){ 

$to = array('%E6','%F8','%E5','%F6','%EB','%E4','%C6','%D8','%C5','%C4','%D6','%CB', '%FC', '+', ' '); 
$from = array('æ', 'ø', 'å', 'ä', 'ö', 'ë', 'æ', 'ø', 'å', 'ä', 'ö', 'ë', '-', '-'); 

$string = str_replace($from, $to, $string); 

return $string; 
} 

$items是一個數組方含建議字。

foreach ($items as $key=>$value) { 
    if (strpos(strtolower(rewrite($key)), $q) !== false) { 
    echo utf8_encode($key)."\n"; 
    } 
} 

jQuery代碼:

$(document).ready(function(){ 
$("#autocomplete").autocomplete("/search_words.php", { 
     position: 'after', 
     selectFirst: false, 
     minChars: 3, 
     width: 240, 
     cacheLength: 100, 
     delay: 0 
     } 
    ) 
} 
); 
+0

在第一個位置使用非編碼字符時,您獲得有效返回嗎?你如何構建返回列表 - 可能有助於查看代碼\查詢。 – menkes 2009-12-29 16:16:17

+4

爲什麼使用自定義編碼腳本,爲什麼不用utf-8用ajax發佈數據? – dfilkovi 2009-12-29 16:35:01

+0

發佈一些代碼! – Galen 2009-12-29 16:59:03

回答

0

謝謝你的所有答案和幫助。我當然瞭解PHP和編碼:)

但是,這爲我工作的解決方案的一些新的東西是這樣的:

我發現jQuery的自動完成功能實際上是UTF-8編碼和小寫字母特殊字符發送前到PHP函數。所以當我寫出建議內容的數組時,我用我的rewrite()函數來編碼特殊字符。所以在我的比較函數中,我只需要小寫一切。

現在它工作的很棒!

0

我使用了一個類似的配置,但與丹麥字符(AE,O和A)和我沒有任何字符的問題。你確定你正確編碼所有字符?

我的回覆包含|分隔的值列表。所有的值都是UTF-8編碼的(這就是它們如何存儲在數據庫中),並且我將內容類型設置爲text/plain; charset = utf-8使用php的頭文件功能。最後一點對於它的工作並不需要。

  • 弗蘭克
7

的錯誤(我認爲):

  • Strtolower()不會小寫特殊字符。
  • 因此,你是不是將資金在重新寫功能的特殊字符(Ä Æ Ø Å等)

,如果我理解正確的代碼,爲Øygarden查詢(請注意大寫的O)將離開第一字符的原始形式Ø,但您要查詢針對這應該是%C3%98

您應該使用指定mb_convert_case() UTF-8編碼的urlencode()來d形式。

讓我知道這是否解決了它。

一般重寫建議

你的代碼可以使用標準的PHP函數,它可以處理所有的Unicode字符,而不是隻是那些你指定被替換100%,因而是不容易的錯誤。我想您的自定義功能rewrite()的功能可以通過

  • urldecode()
  • iconv()

你會再拿到,你不需要適當的UTF-8編碼的數據被替換到utf8_encode()以上。 有可能獲得一種適用於所有角色的更清晰的方法。它可能也是那種已經排序任何錯誤(如果錯誤在你的代碼中)。

0

我有類似的問題。在我的情況下解決方案是urldecode()php函數將字符串轉換回它的原始,併發送查詢分貝。