素晴らしい解決策

WBOY
WBOYオリジナル
2016-06-13 12:00:544751ブラウズ

Magic
早速、コードについて説明します。
フロントデスク:

<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 に「Baidu」
と入力すると、次のように表示されます:
Baidu Antivirus
Baidu Guard
Baidu Video

最初の項目 Baidu Antivirus を選択すると、Firefox には次のように表示されます:
http://192.168.1.101/index/select_infomessage-s_paramName- %Baidu Antivirus.html
何もありません。 。 。
2 番目の項目 Baidu Guard を選択すると、Firefox に次のメッセージが表示されます:
http://192.168.1.101/index/select_infomessage-s_paramName-Baidu Guard.html
通常どおりに検索すると、情報を検索できます。他の項目も正常ですが、最初の項目が異常です。

Du Niang は、これは BOM ヘッダーだと言いました。私のページはすべて BOM ヘッダーが削除されており、エンコーディングも UTF8 です。いろいろ試しましたが、問題は解決できませんでした。
最初の項目には %,,,,, が追加されているのですが、他の項目は正常に表示されるのはなぜですか?


-----解決策---------------------------- -
public function get_search_showdiv( )
この関数が配置されている php スクリプト ファイルには BOM があります
-----解決策---------- ---------
utf-8 ファイルの BOM ヘッダーの 16 進数表現は、エンコード後は

ajax になります。リクエストされた URL は __APP__/index/get_search_showdiv です
明らかにこれはフレームワークを使用しています

フレームワークがリクエストを処理するとき、少なくとも 3 つのファイルをロードします
したがって、ロードされたファイルには BOM ヘッダーがあり、返されたコンテンツには BOM ヘッダー

が含まれます。接続は .... Baidu antivirus.html
ではなく .... Baidu antivirus.html
になります。これは、接続が 1 つだけであることを意味しますBOM ヘッダーを持つファイル

ajax は、[email 文字列
BOM of protected]@xxx@ がコンテンツの前に追加されます: [email protected]@xxx@
配列に分割した後は、当然最初の項目のみが BOM を持ちます

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。