2016-10-04 2 views
1

Я извлекаю данные из базы данных с помощью mysqli и php.htmlspecialchars() заставляет переменную возвращать пустые данные?

это работает нормально, но я получаю случайный символ (черный вопросительный знак), заменяющий апостроф в словах, так я думал, что я мог бы использовать htmlspecialchars() функцию, чтобы они отображаются должным образом, но он не работает :(

мой код выглядит следующим образом

while($row = $result->fetch_assoc()) 
{ 
    $desc = htmlspecialchars($row['description'], ENT_QUOTES);?> 

    <div class="timeline-key"> 
     <div class="fluid key-content"> 
      <p><?php echo $desc?></p> 
     </div> 
    </div><?php 
} 

теперь любая запись в базе данных, которая содержит апостроф $ DESc распечатывает ничего, все другие записи распечатать нормально?

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

может кто-нибудь объяснить мне простыми словами, как я могу решить это, пожалуйста.

веселит

+0

Несомненно, вы можете предоставить соответствующие части полученного HTML-файла. –

+0

да, извините, внесли изменения и добавили ссылку на сайт. спасибо – BBLJ84

ответ

2

С веб-сайта вы связаны, то очевидно, что сама страница использует UTF-8 для кодировки символов (<meta charset="UTF-8">). Кажется, что база данных, из которой вы извлекаете данные, использует кодировку символов, которая не равна значению ini_get("default_charset"). If you get the encoding wrong, htmlspecialchars will return the empty string, вот что вы здесь видите.

Решение должно быть последовательным в (или явным образом) о том, какую кодировку символов вы используете. Это намного проще, если вы используете одну кодировку символов для всего. Давайте используем UTF-8 в качестве хорошего примера:

  • Сообщите браузеру, что вы используете UTF-8. Вы уже делаете это с помощью метатега, так что это хорошо.
  • Tell PHP you're using UTF-8. Убедитесь, что php.ini устанавливает default_charset в UTF-8.
  • Tell MySQL you're using UTF-8. Убедитесь, что таблицы в вашей базе данных используют UTF-8 в качестве их кодировки -edit- или говорят, что интерфейс MySQL использует UTF-8.

В качестве альтернативы, вы можете использовать функцию как mb_convert_encoding для преобразования строк между различными кодировками, что браузер ожидает, что PHP берет на себя, и что MySQL использует для хранения и обслуживания текста.

+0

благодарим вас за подробный ответ, я понимаю, что происходит сейчас. как вы сказали, я сказал браузеру использовать UTF-8, теперь я добавил следующее, чтобы узнать, что кодировка по умолчанию для php: echo ini_get («default_charset»); и это возвращает UTF-8, так что теперь он просто до самой базы данных. которые у меня возникают проблемы с проверкой. я жду моего хоста, чтобы вернуться ко мне, чтобы посмотреть, что текущий charset – BBLJ84

+1

ok Я только что проверил свой код sql, используя var_dump ($ conn-> get_charset()); и этот возвращенный объект (stdClass) # 2 (8) {["charset"] => string (6) "latin1" ["collation"] => string (17) "latin1_swedish_ci" ["dir"] => string (0) "" ["min_length"] => int (1) ["max_length"] => int (1) ["number"] => int (8) ["state"] => int (1) [" comment "] => string (0)" "}, который показывает, что mysql charset - latin1_swedish_ci, так что это, очевидно, проблема здесь.в настоящее время пытается установить новую кодировку для mysql – BBLJ84

+0

Запросить информационную схему, как описано [в этом ответе] (/ a/1049958/824425). –

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