2016-03-18 3 views
2

Я получил базу данных от клиента и должен создать вокруг нее некоторую логику, такую ​​как чтение и вставка записей.Специальные символы в именах столбцов

Когда я попробовал некоторые основные запросы, как:

$json = array(); 
$query = "select * from tab1"; 

if ($result = $link->query ($query)) { 
    while ($row = $result->fetch_assoc()) { 
     array_push ($json, $row); 
    } 
} 

die (json_encode ($json)); 

я неожиданно получил пустой ответ.

Выполнение одного и того же запроса непосредственно из PHPMyAdmin, я получил все ожидаемые результаты.

Когда я просто сбрасывал результат JSON в браузере, я заметил (экстракт):

... string(30) "ColumnName(�)" ... 

Это мне потребовалось некоторое время, чтобы выяснить, что там было колонны имени с некоторой специальной Charaters, как µ и °. По-видимому, они не могли отображаться должным образом, поэтому весь ответ стал недействительным, и я не получил никаких результатов.

Просто удаление этих символов из названия столбца решило проблему.

Есть ли другое решение, вместо того, чтобы просто искать эти символы вручную и удалять их?

+0

Там нет врожденной проблемы со специальными символами в колонке имена. Что именно делает ваш код? – VoteyDisciple

+0

Установите charset для соединения с utf8 (utf8mb4 - это реальная кодировка Unicode в mysql, поэтому используйте это, если хотите) и поместите имена таблиц и столбцов в обратные ссылки. –

ответ

1

Поскольку json_encode()/json_decode() имеет дело только с UTF-8 кодирования, вы должны преобразовать все не utf8 закодированной строку в utf8

Вы можете использовать utf8-encode() function

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