2012-11-07 56 views
1

我注意到一些名稱條目,如O'Rourke或O'reilly在某些情況下打破了JavaScript。我想知道你是如何處理它的。我將這些名稱從PHP/MYSQL中提取出來並放入JavaScript中。你如何處理',在php中的人名單引號,javascript

是否在進入數據庫之前或在拔出數據庫之前替換它們?

在此先感謝

google.load('visualization', '1', {packages:['table']}); 
     google.setOnLoadCallback(drawTable); 
     function drawTable() { 
     var data = new google.visualization.DataTable(); 
     data.addColumn('string', 'First Name'); 
     data.addColumn('string', 'Last Name'); 
     data.addColumn('string', 'email'); 
     data.addColumn('string', 'Parent email 1'); 
     data.addColumn('string', 'Parent email 2'); 
     data.addColumn('string', 'Advisor'); 
     data.addColumn('string', 'Active'); 
     data.addColumn('string', 'Edit'); 
     //data.addColumn('number', ''); 
     data.addRows([ 
    <?php 
    if(count($items)) 
    { 
     foreach($items as $item) 
     { 
      foreach($advisors as $key=>$advisor) 
      { 
       if($item['advisor']==$advisor['id']) 
       { 
        $ad=$advisor['last_name']; 
       } 
      } 
      $active_icon = ($item['active']=='1'?'tick':'cross'); 
      $editlink = anchor('auth/admin/members/form/'.$item['id'],$this->bep_assets->icon('pencil')); 
      echo "['".$item['first_name']."', '".$item['last_name']."', '".$item['email'] 
      ."', '".$item['parent_email1']."', '".$item['parent_email2']."', '".$ad."', '".$this->bep_assets->icon($active_icon)."','".$editlink."'],"; 
     } 
    } 

    ?> 

     ]); 

     var table = new google.visualization.Table(document.getElementById('table_div')); 
     table.draw(data, {showRowNumber: true, allowHtml:true}); 
     } 
+2

什麼是您的實現?您可能必須將其轉義或轉換爲HTML實體。 – Eric

+0

有趣的是:如果您的數據源包含印刷(即「正確」)撇號(')而不是稱爲直撇子(')的醜陋妥協,您永遠不會知道有什麼問題... –

+0

你在用什麼將值放入數據庫中? – slashingweapon

回答

2

你經歷了很多的混亂和容易出錯的字符串附加工作只是輸出一個javascript變量。你應該做的是用PHP(一個數組數組)構建你想要的數據結構,然後使用json_encode()發出一個javascript兼容的文字。所有的引號等都將被編碼器自動轉義。

$itemOutput = array(); 
if(count($items)) { 
    foreach($items as $item) { 
     foreach($advisors as $key=>$advisor) { 
      if($item['advisor']==$advisor['id']) { 
       $ad=$advisor['last_name']; 
      } 
     } 
     $active_icon = ($item['active']=='1'?'tick':'cross'); 
     $editlink = anchor('auth/admin/members/form/'.$item['id'],$this->bep_assets->icon('pencil')); 
     $itemOutput[] = array(
      $item['first_name'], 
      $item['last_name'], 
      $item['email'], 
      $item['parent_email'], 
      $item['parent_email2'], 
      $ad, 
      $this->beep_assets->icon($active_icon), 
      $editLink 
     ); 
    } 
} 
echo "data.addRows(" . json_encode($itemOutput) . ");" ; 

如果你有一個對象或關聯數組時,它會發出一個JavaScript對象:

echo json_encode( 
    array('a'=>'aa', 'b'=>'bb'), 
    array('c'=>'cc', 'd'=>'dd') 
); 
==> [{"a":"aa","b":"bb"},{"c":"cc","d":"dd"}] 
+1

偉大的解決方案。比使用'addslashes'更好。這樣你甚至不需要使用字符串連接構建JS數組,而是可以直接編寫本地PHP數組,並且自動處理所有內容。 –

+0

我試過json_encode($ item ['first_name']),但它仍然給出錯誤。 – shin

+0

重寫答案。當你說「它仍然有錯誤」時,你的意思是什麼錯誤? – slashingweapon