返回列表 發帖
各位大大好
我最近也在研究這個MOD
我的實驗環境
PHP+MYSQL(全採UTF-8編碼)

方法一(寫死)
在HTML的陣列裡面取資料

方法二(寫死)
透過AJAX取得你的動態檔案(php..asp..)
(但實際上還是把HTML的陣列資料放到php..asp..檔案而已)

方法三(自創)(從資料庫取得資料)
目前我碰到一些問題--假設資料庫有下列5筆資料
a許功蓋
a許不蓋
a許大概
許功蓋
許小蓋

當我在文字框中輸入a時--會出現(開頭是英文都沒問題)
a許功蓋
a許不蓋
a許大概
讓我選取--當選娶某一個值時--pop警告視窗也會說我抓到了正確的值

但(開頭是中文就會有問題)
當我打'許'而已時--卻不會出現
許功蓋
許小蓋
讓我選取--取而代之的是錯誤訊息Illegal mix of collations (utf8_general_ci,IMPLICIT) and (big5_chinese_ci,COERCIBLE) for operation 'like'
很明顯這是編碼錯誤造成欄位資料無法匹配的問題--有兩個解決辦法
方法A:將資料庫中匹配欄位的那個屬性改成big5_chinese_ci(utf8_general_ci是我原來的)
方法B:將
var url = options.url + "?q=" + encodeURI(q);
url += "&" + i + "=" + encodeURI(options.extraParams);
分別改成
var url = options.url + "?q=" + escape(q);
url += "&" + i + "=" + escape(options.extraParams);
就不會出現上述問題

這次我再打'許'或任何開頭中文的字--少了錯誤訊息--但還是沒出現應該要出現的選項--什麼都沒發生
請問有沒有人有這方面的相關實例
希望各位多指教
邁向神乎其技的境界^^

TOP

看起來是資料庫編碼的問題,和 jQuery 無關。
如果都是 utf-8 的編碼,應該不會有上述的問題,你可以試著先在 server 端的 php 程式把正確的資料撈出來後,再來套前端的 UI。

你去資料庫撈資料的語法是自己寫的嗎?
會不會在開啟資料庫連線後忘了指定編碼:
mysql_query('SET NAMES utf8');
To infinity and beyond!

TOP

是的
全部都是utf-8編碼
mysql_query('SET NAMES big5' );
mysql_query("SET NAMES utf8' );
我都試過了--不過都是一樣的狀況
我可否把我的檔案跟資料庫結構傳一份給您
您幫我看看好嗎
因為我研究真的研究了很久了
就是中文首字問題沒法解決
如果可以的話--看是傳MAIL或是連結都可^^||

DEMO網址如下
http://59.124.2.38/autocomplete/autocomplete.html

[ 本帖最後由 bau720123 於 2009-3-10 15:05 編輯 ]
邁向神乎其技的境界^^

TOP

ok 你可以用網頁最下面的「聯繫我們 」的 email,或是你把檔案放到某個地方,再用「發短消息」的功能傳送給我即可,我會試著幫你看一下問題在哪。
To infinity and beyond!

TOP

信件已寄出
內有完整使用說明
輸入資料時
可以隨便打a or c or d or 包 or 許
等字串
現在英文是OK的~中文就如您所知到的狀況一樣
再次感謝
邁向神乎其技的境界^^

TOP

我發現資料傳到 server 端會被編碼,
許功蓋會變成 "%u8A31%u529F%u84CB" 的字串,
所以要再用以下的方式取為原字串:
$q = join('', json_decode('["'. strtr($_GET['q'], '%u', '\u') . '"]'));
To infinity and beyond!

TOP

目前我把網頁也變成了UTF-8
php,ini裡面也設定default_charset = "UTF-8"
以下是在不同的程式語法下測試的狀況
也麻煩您再幫我看一次
測試環境--自己電腦上的瀏覽器(IE跟FF)

您的意思是說把
$q = strtolower($_GET["q"]);
替換成
$q = join('', json_decode('["'. strtr($_GET['q'], '%u', '\u') . '"]'));


但結果在伺服器上沒什麼變化ㄟ
我準備了兩個版本
autocomplete_ajax.php是沿用原來的$q = strtolower($_GET["q"]);
autocomplete_ajax1.php是沿用新的$q = join('', json_decode('["'. strtr($_GET['q'], '%u', '\u') . '"]'));

包=
http://59.124.2.38/autocomplete/autocomplete_ajax.php?q=包
http://59.124.2.38/autocomplete/autocomplete_ajax.php?q=%A5]
http://59.124.2.38/autocomplete/autocomplete_ajax1.php?q=包
http://59.124.2.38/autocomplete/autocomplete_ajax1.php?q=%A5]

許=
http://59.124.2.38/autocomplete/autocomplete_ajax.php?q=許
http://59.124.2.38/autocomplete/autocomplete_ajax.php?q=%B3\
http://59.124.2.38/autocomplete/autocomplete_ajax1.php?q=許
http://59.124.2.38/autocomplete/autocomplete_ajax1.php?q=%B3\

前台測試網址
http://59.124.2.38/autocomplete/autocomplete.html
http://59.124.2.38/autocomplete/autocomplete1.html

[ 本帖最後由 bau720123 於 2009-3-11 12:27 編輯 ]
邁向神乎其技的境界^^

TOP

我把我目前可運作的程式完整寄回給你看看。
所有的檔案資料都以 UTF-8 來做,
包含你原本的 autocomplete.html 也轉成 UTF-8 編碼。
To infinity and beyond!

TOP

我收到您的來信了
真的可以執行了
中文首字偵測也沒問題
我大概知道我哪些地方跟您這個版本設定的不一樣之處了
最後一個小問題希望您能給我一些建議

像打英文時--比方'a'--打完的那一剎那它自己會感應出應對的資料
但中文似乎有點兩光--比方打完'包'時--資料不會立即出來
這時要鍵盤上的方向鍵左或右動一下--這時才會感應出應對的資料
這跟字元碼有什麼相關的因素影響嗎???
希望能聽聽看您的看法跟建議
然後我再朝那個方向先自行去研究
真的不行時再上來論壇請教
再次謝謝您

PS
後記
後來我發現這個狀況目前在FF才會有這樣的狀況
IE我的版本是6是會立即自動感應的

[ 本帖最後由 bau720123 於 2009-3-12 11:35 編輯 ]
邁向神乎其技的境界^^

TOP

中文輸入的部份,可能和輸入法有關係喔,我這邊看起來是都還蠻順的,不會需要左右鍵動一下才出現資料。我是用酷音和雅虎奇摩輸入法,兩個都正常。
To infinity and beyond!

TOP

返回列表 回復 發帖