2016-10-04 80 views
1

當我在文本框中使用某些字符(如/)時,我在response中返回empty string。我可以很容易地檢查我的html中的empty string,但我的問題是如何避免在我的php代碼中發送空字符串?在PHP中返回空字符串

$("#search").keyup(function(){ 
    var newVal = $(this).val(); 
    if(!newVal==""){ 
     $.ajax({ 
       type : 'get', 
       dataType: 'html', 
       url : '/searchpost/' + newVal , 
       success : function(response) { 
        console.log(response); 
       } 
     }); 
    } 
}); 

public function searchpost() { 

     $q = $this->uri->segment(3); 
     if(!$q) die(); 

     $string = trim(strip_tags($q)); 
     $db_string = urldecode($string); 

     $this->db->select("postID, post_title, post_url, post_status"); 
     $this->db->like("post_title", $db_string); 
     $this->db->or_like("post_url", $db_string); 

     $posts = $this->db->get('posts', 10); 

     if(!count($posts->result())) { 
      die('Nothing to display'); 
     } 

     ?> 

     <ul> 
     <?php 
     foreach($posts->result() as $m) : 
      if($m->post_status != 'active' OR empty($m->post_title)) continue; 
     ?> 
     <li> 
      <a href="<?php echo '/posts/'.$m->postID.'/'.url_title($m->post_title); ?>" class="url-post-title" style="font-size:14px;"><?php echo $m->post_url; ?></a> 
      </a> 
     </li> 
     <?php endforeach; ?> 
     </ul> 

     <?php 

    } 
+0

用/作爲轉義字符,使用控制檯日誌和的var_dump檢查您發送的信息和recieving。 – Aschab

+0

@Aschab控制檯打印輸出「(一個空字符串)」 – user4756836

+0

console.log($(this).val())給你空字符串? – Aschab

回答

1

你可以改變你的js的功能和使用encodeURIComponent發送請求之前的值編碼:

$("#search").keyup(function(){ 
    var newVal = $(this).val(); 
    if(newVal !== undefined && newVal.length > 0){ 
     $.ajax({ 
       type : 'get', 
       dataType: 'html', 
       url : '/searchpost/' + encodeURIComponent(newVal) , 
       success : function(response) { 
        console.log(response); 
       } 
     }); 
    } 
}) 

那麼你可能需要處理在PHP函數現在URL編碼值。

所以不是:

$db_string = urldecode($string); 

使用rawurldecode

$db_string = rawurldecode($string);