2013-06-12 3 views
1

У меня есть настройка автозаполнения jQuery для ввода текста, а апострофы не преобразуются из ', а именно, как они хранятся в базе данных.jquery autocomplete кодировка символов

Выпадающие дисплеи Autocomplete Bill's Apartments вместо Bill's Apartments.

С моей точки зрения браузер конвертирует ' в и апостроф, '.

Являются ли данные двойными закодированными? Является ли jQuery кодировкой данных, которые он получает через $.ajax? Это похоже на случай, когда апостроф уже закодирован. jQuery должен кодировать амперсанд?

  • Я сохраняю свои файлы с помощью UTF-8 Encoding.
  • MySQL charset: UTF-8 Unicode (utf8)
  • Составление базы данных utf8_general_ci.
  • Использование метатега с HTML 5, <meta charset="utf-8">.
  • Backend PHP-скрипт для ajax использует json_encode() для массива имен свойств.
  • Использование error_log() для хранения результата json_encode() я получаю, [{"value":"Bill&#39;s Apartments"}]
  • Использование console.log(data) показывает Bill&#39;s Apartments.
  • Доступ к скрипту PHP Ajax непосредственно в браузере с добавлением ?term=bi к пути возвращает [{"value":"Bill's Apartments"}].
  • Использование PHP-функций, таких как html_entity_decode() или htmlspecialchars(), не работает или кажется правильным решением.

HTML

<input type="text" id="property-name" name="property-name" value="">

JQuery

$('#property-name').autocomplete({ 
    source: function(request, response) { 
      $.ajax({ 
       url : ABSPATH + 'includes/ajax/property-name-search.php', 
       dataType : "json", 
       data : request, 
       success : function(data) { 
        response(data); 
       } 
      }); 
    }, 
    max: 25, 
    minLength: 2 
}); 

упрощенный Backend PHP

$query = "SELECT `property_name` 
      FROM `property_name_table` 
      WHERE `property_name` LIKE '%name%'"; 

$result = $mysqli->query($query); 

while ($row = $result->fetch_object()) : 
    $property_names[] = array('value' => $row->property_name); 
endwhile; 

echo json_encode($property_names); 

ответ

1

Похоже, вы передаете закодированные данные непосредственно в свою функцию. Браузер запрашивает и отправляет данные json. Другими словами, браузер не будет анализировать ваши данные как html.

Я предлагаю попробовать либо что-то вроде этого $ (# some_div> .html (возвращаемые данные АЯКС вызова); Затем устанавливающих автозаполнения, чтобы взять в качестве источника some_div Примечание: в JQuery .html функция будет unencode ваши данные.

Или использовать пользовательскую функцию преобразования как этот htmlUnescape здесь https://stackoverflow.com/a/7124052/2478282

+0

, поскольку я передаю кодированный каталог данных в мою функцию, и это динамично добавляется к странице, делает браузер не имеет шанс проанализировать кодировку в том, что она представляет? Наверное, это то, о чем я прошу. – hungerstar

+0

Браузер попытается декодировать html, а не javascript. Однако некоторые функции jquery, например html(), также будут декодировать html, но автозаполнение не является одним из них. – DavidW

+0

Хорошо. Если вы можете отредактировать свой ответ и добавить его, чтобы он объяснял, почему кодированный символ не расшифровывается браузером, я думаю, что это удовлетворит мой вопрос, и я приму ваш ответ. – hungerstar

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