Rumah >pembangunan bahagian belakang >tutorial php >神奇的%EF%BB%BF解决方法

神奇的%EF%BB%BF解决方法

WBOY
WBOYasal
2016-06-13 12:00:544751semak imbas

神奇的%EF%BB%BF
废话不多说上代码:
前台:

<br />function on_post_form(){<br />	var f = document.post_myform;<br />	var s_paramName = document.getElementById("select_paramName").value;<br />        f.action = "__APP__/index/select_infomessage-s_paramName-"+encodeURIComponent(s_paramName)+".html";<br />        f.submit();<br />}<br /><input name="select_paramName" class="KeyWord" id="select_paramName" size="20" maxlength="30" type="text"><br /><div id="searchresult" style="display: none;"></div><br />

<br />$(document).ready(function(){<br /> $('#select_paramName').keyup(function(){   //输入框的id为search,这里监听输入框的keyup事件<br />  $.ajax({<br />     type:"GET",     //AJAX提交方式为GET提交<br />	   url:"__APP__/index/get_search_showdiv",   //处理页的URL地址<br />	   data:"s_Name="+encodeURIComponent($('#select_paramName').val()),   //要传递的参数<br />	   success:function(data){   //成功后执行的方法<br />	      if(data != ""){<br />				var ss;<br />				ss = data.split("@");   //分割返回的字符串<br />				var layer;<br />				layer = "<table>";     //创建一个table<br />				for(var i=0;i<ss.length-1;i++){<br />				 layer += "<tr><td class='line'>"+ss[i]+"</td></tr>";<br />				}<br />				layer += "</table>";<br />				$('#searchresult').empty();  //先清空#searchresult下的所有子元素<br />				$('#searchresult').append(layer);//将刚才创建的table插入到#searchresult内<br />				$("#searchresult").css("display", "");<br />				$('.line').hover(function(){  //监听提示框的鼠标悬停事件<br />				 $(this).addClass("hover"); <br />				},function(){<br />				 $(this).removeClass("hover");<br />				});<br />				$('.line').click(function(){  //监听提示框的鼠标单击事件<br />				 $('#select_paramName').val($(this).text());<br />				 $("#searchresult").css("display", "none"); <br />				 ChangeCoords();<br />				});<br />			   }else{<br />				$('#searchresult').empty();<br />			   }<br />	   }<br />  });<br /> });<br />});<br />


后台:
<br />public function get_search_showdiv()<br />	{<br />	   //urlencode urldecode 文本框自动提示<br />	   $keyword = urldecode($_GET['s_Name']);<br />	   $condition = "f_hotname like '%".$keyword."%'";<br />	   $info=$this->model->table('forest')->field('f_hotname')->where($condition)->order('f_id desc')->limit(5)->select();<br />	   if($keyword !=""){<br />		   foreach($info as $vo)     <br />		   {      <br />			 echo $vo['f_hotname'].'@';    <br />		   } <br />	   }else{<br />	       <br />		   echo "";<br />	   }<br />	}<br />


问题症状:比如输入“百度”    
在div   #searchresult   里显示:
百度杀毒
百度卫士
百度影音

如果选择第一项百度杀毒,火狐浏览器这样显示:
http://192.168.1.101/index/select_infomessage-s_paramName-%EF%BB%BF%百度杀毒.html
什么也没有。。。
如果选择第二项百度卫士,火狐浏览器这样显示:
http://192.168.1.101/index/select_infomessage-s_paramName-百度卫士.html
正常搜索,可以搜索到信息。其它项也是正常,唯独第一项就不正常。

度娘说是bom头,我所有页面都是去bom头的,编码也是utf8,尝试了很多也解决不了问题。
为什么会在第一项时候会加入%EF%BB%BF%,,,,, 在其它项都可以正常显示的。


------解决方案--------------------
public function get_search_showdiv()
这个函数所在php脚本文件有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 收到的是形如 [email protected]@xxx@ 的串
BOM 当然是附加在内容前面的: [email protected]@xxx@
拆分成数组后,自然是只有第一项有 BOM 啦

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn