神奇的%EF%BB%BF

來源:互聯網
上載者:User
廢話不多說上代碼:
前台:
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 啦

那怎麼解決這個問題呢

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.