2016-10-18 145 views
0

我試圖從mysql數據庫中提取一些信息,然後json對它進行編碼。我遇到了特殊字符的問題。我將從包含特殊字符的數據庫中提取信息,但是當我使用PHP json_encode函數時,它無法編碼並返回FALSE。特殊字符和json_encode

我我已經嘗試了下面的兩種方法。

我的查詢中我有這樣的:

CONVERT(item_stub.name USING utf8) 

似乎並沒有做任何事情。於是我添加了下面的查詢後,將數據轉換爲UTF-8:

while($r = $db->fetch($result)){ 
     $r[] = array_map('utf8_encode', $r); 

這似乎處理非UTF8單引號,但我仍然有商標符號的問題。

我也試着使用PHPヶ輛並用htmlspecialchars功能,但這些也不能像json_encode

回答

0

嘗試添加ENT_QUOTES標誌htmlspecialchars()。你喜歡這樣很會照顧單引號和雙引號:

<?php 

     while($r = $db->fetch($result)){ 
      $r[] = array_map(
        'utf8_encode', 
        htmlentities(htmlspecialchars($r, ENT_QUOTES, 'UTF-8', true))); 
      // CODE CONTINUES... (IF ANY)... 
     } 

QUICK-TEST THIS:

$r = "™™™™@†©√∫∫~ªß¥ß∂ƒåßßå∑€ƒ∑€åå€∑€∑ƒ"; 
    $s = htmlentities(htmlspecialchars($r, ENT_QUOTES, 'UTF-8', true)); 
    var_dump($s); 
    //YIELDS: 
    '&trade;&trade;&trade;&trade;@&dagger;&copy;&radic;&int;&int;~&ordf;&szlig;&yen;&szlig;&part;&fnof;&aring;&szlig;&szlig;&aring;&sum;&euro;&fnof;&sum;&euro;&aring;&aring;&euro;&sum;&euro;&sum;&fnof;' (length=196) 
+0

我的問題不再是引號,而是商標符號和重音字符。 @poiz – user2874270

+0

@ user2874270然後在'htmlentities'內換行,因爲更新後的帖子顯示... *另請參閱附加的測試鏈接... * – Poiz

0

你必須要在使用前array_map功能肯定。

  1. 檢查您的PHP文件編碼,它應該是UTF-8 File Encoding

  2. 使用PHP 頭(header('Content-Type: text/html; charset=utf-8');)或元 標籤(<meta http-equiv="Content-type" content="text/html; charset=utf-8" />),以允許文件處理UTF8字符。

  3. 在獲取信息之前運行SET NAMES 'utf8' sql。

然後使用array_map和json_encode函數。它可能會幫助你。