廢話不多說上代碼:
前台:
function on_post_form(){var f = document.post_myform;var s_paramName = document.getElementById("select_paramName").value; f.action = "__APP__/index/select_infomessage-s_paramName-"+encodeURIComponent(s_paramName)+".html"; f.submit();}
$(document).ready(function(){ $('#select_paramName').keyup(function(){ //輸入框的id為search,這裡監聽輸入框的keyup事件 $.ajax({ type:"GET", //AJAX提交方式為GET提交 url:"__APP__/index/get_search_showdiv", //處理頁的URL地址 data:"s_Name="+encodeURIComponent($('#select_paramName').val()), //要傳遞的參數 success:function(data){ //成功後執行的方法 if(data != ""){var ss;ss = data.split("@"); //分割返回的字串var layer;layer = "";}layer += "
"; //建立一個tablefor(var i=0;i
";$('#searchresult').empty(); //先清空#searchresult下的所有子項目$('#searchresult').append(layer);//將剛才建立的table插入到#searchresult內$("#searchresult").css("display", "");$('.line').hover(function(){ //監聽提示框的滑鼠移至上方事件 $(this).addClass("hover"); },function(){ $(this).removeClass("hover");});$('.line').click(function(){ //監聽提示框的按一下滑鼠事件 $('#select_paramName').val($(this).text()); $("#searchresult").css("display", "none"); ChangeCoords();}); }else{$('#searchresult').empty(); } } }); });});
後台:
public function get_search_showdiv(){ //urlencode urldecode 文字框自動提示 $keyword = urldecode($_GET['s_Name']); $condition = "f_hotname like '%".$keyword."%'"; $info=$this->model->table('forest')->field('f_hotname')->where($condition)->order('f_id desc')->limit(5)->select(); if($keyword !=""){ foreach($info as $vo) { echo $vo['f_hotname'].'@'; } }else{ echo ""; }}
問題癥狀:比如輸入“百度”
在div #searchresult 裡顯示:
百度殺毒
百度衛士
百度影音
如果選擇第一項百度殺毒,Firefox瀏覽器這樣顯示:
http://192.168.1.101/index/select_infomessage-s_paramName-%EF%BB%BF%百度殺毒.html
什麼也沒有。。。
如果選擇第二項百度衛士,Firefox瀏覽器這樣顯示:
http://192.168.1.101/index/select_infomessage-s_paramName-百度衛士.html
正常搜尋,可以搜尋到資訊。其它項也是正常,唯獨第一項就不正常。
度娘說是bom頭,我所有頁面都是去bom頭的,編碼也是utf8,嘗試了很多也解決不了問題。
為什麼會在第一項時候會加入%EF%BB%BF%,,,,, 在其它項都可以正常顯示的。
回複討論(解決方案)
%EF%BB%BF 不就是 BOM 頭的 url 編碼嗎?
因為只有一個,所以你程式載入的檔案中,只有一個有 BOM 頭
public function get_search_showdiv()
這個函數所在php指令檔有BOM
%EF%BB%BF 不就是 BOM 頭的 url 編碼嗎?
因為只有一個,所以你程式載入的檔案中,只有一個有 BOM 頭
不好意思,這幾天出差,剛剛回來,什麼意思,沒看明白。
utf-8 檔案的 BOM 頭的十六進位表示是 EFBBBF
url 編碼後是 %EF%BB%BF
ajax 請求的 url 為 __APP__/index/get_search_showdiv
顯然這是在使用架構
架構在處理一個請求時,至少會載入 3 個檔案
所以任何一個被載入的檔案有 BOM 頭,返回的內容就會有 BOM 頭
串連變成 ....%EF%BB%BF百度殺毒.html
而不是 ....%EF%BB%BF%EF%BB%BF百度殺毒.html
就表示只有一個檔案有 BOM 頭
ajax 收到的是形如 xxx@xxx@xxx@ 的串
BOM 當然是附加在內容前面的: BOMxxx@xxx@xxx@
拆分成數組後,自然是只有第一項有 BOM 啦
那怎麼解決這個問題呢