2016-10-18 7 views
0

Я пытаюсь извлечь некоторую информацию из базы данных mysql, а затем json закодировать ее. У меня проблемы со специальными символами. Я вытащу информацию из базы данных, содержащей специальные символы, но затем, когда я использую функцию PHP json_encode, она не может кодировать и возвращает FALSE.Специальные символы и json_encode

Я пробовал два метода ниже.

В моем запросе я это:

CONVERT(item_stub.name USING utf8) 

Это, похоже, не делать ничего. Затем я добавил следующее для преобразования данных в UTF8 после запроса:

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

Это, казалось, обрабатывать не-utf8 одиночные кавычки, но я все еще возникают проблемы с символом товарного знака.

Я также попытался с помощью PHP htmlentities и 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. Это может вам помочь.

Смежные вопросы