2016-02-17 2 views
1

У меня есть код PHP, который я использую, чтобы извлекать записи из базы данных, помещать их в массив, помещать этот массив в другой массив и затем форматировать этот массив в JSON. Подключение к базе данных и извлечение информации отлично работают, как и создание второго массива и преобразование в JSON. Но некоторые записи (12 из 175), по-видимому, становятся пустым, когда помещаются в первый массив. Я уверен, что это имеет какое-то отношение к неэкранированным и нестандартным символам, но я не могу для жизни понять, что мне нужно сделать, чтобы убедиться, что он правильно добавлен в массив. Я пробовал добавить addslashes и htmlentities, чтобы убедиться, что это не стандартная проблема выхода, но это все еще происходит. Все записи в настоящее время кодируются как ASCII.Нечетная проблема с экранированными записями и добавлением в массив

Вот результаты, которые идут вверх пустым при добавлении в массив:

A Gentlewoman’s Lament 
By true record of the Doctor Bede 
A Lover’s Lament 
Complaint þat Crist maketh of his Passioun 
How þe louer is sett to serve þe floure 
Fifteen O’s of Christ 
Balade made by Lydgate at þe Departyng of Thomas Chaucyer on Ambassade into France 
On the Mutability of Man’s Nature due to the Seasons, the Elements, the Complexions, and the Planets 
That now is hay þat sumtyme was grasse 
Balade on a New Year’s Gift of an Eagle presented to King Henry VI in 1428 
Everything draweþe to his semblable 
Pélerinage de la vie humaine 

И вот код, который я использую, чтобы вытащить эту информацию из результатов SQL:

while ($row = $work_result->fetch_array()) 
{ 
    echo $row['Work'] . "<BR/>"; 
    $encoding = mb_detect_encoding(htmlentities($row['Work'])); 
    $work_array = array('id'=>$row['id'],'name'=>addslashes(htmlentities($row['Work'])),'encoding'=>$encoding, 'type'=>'work','color'=>'midnightblue'); 
    var_dump($work_array); 
    echo "<BR/>"; 
    array_push($array, $work_array); 
} 

I 'м при полной потере. Я уверен, что есть функция, которую я просто не использую, но что это такое, я понятия не имею. Любая помощь будет оценена по достоинству.

+0

Где находится код преобразования JSON? Возможно, вы используете строку non-utf8 с 'json_encode', которая поддерживает только utf8. – AlexM

+0

Строки - это ASCII, и я понимаю, что utf8 является надмножеством ASCII. Еще мой код для конвертации в JSON: 'json_encode ($ items_array);' '$ items_array' - это больший массив, из которого эти массивы являются частью. – medievalmatt

+0

Просто чтобы проверить, я добавил в свой код конкретную инструкцию utf8_encode, чтобы она указывала \t $ test_array = array ('id' => $ row ['id'], 'name' => utf8_encode (addslashes (htmlentities (htmlentities (htmlentities) $ row ['Work']))), 'encoding' => $ encoding, 'type' => 'work', 'color' => 'midnightblue'); Это не имеет никакого эффекта. – medievalmatt

ответ

0

Чтобы закодировать строку, вы можете использовать urlencode().

$work_array = array('name'=>urlencode($row['Work'])); 
+0

Это действительно странно. '' Данные добавляет результаты с нулевыми результатами, а в то время как 'urlencode' работает, он разрывается, когда полученный json применяется с помощью визуализации d3-vased. Я определил, что персонажи, которые нарушают вещи, это «, þ и é. Таким образом, это определенно ускользает и нестандартные символы. – medievalmatt

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