2016-11-07 18 views
-1

У меня есть два файла PHP, и когда я извлекаю данные из базы данных на этих страницах и отображаю их с помощью print_r, обе страницы отображают содержимое по-разному.Специальные символы HTML не отображаются должным образом

На самом деле у меня есть некоторые специальные символы HTML в моем контенте, с которыми я сбежал, используя htmlspecialchars перед строкой в ​​базе данных MySQL.

, когда я получать их отображения на page1.php он отображается как

My ‘pop’ to display 

но page2.php отображается его как

My ‘pop’ to display 

Я также хочу отметить, что page1.php это моя веб-страница, и у меня есть print_r, чтобы проверить проблему на странице2.php, где page2.php - это страница api, где я использовал echo json_encode для записи данных, но для проверки проблемы я заменил ее print_r

+0

Я думаю, его проблема с выпуском utf8, поэтому перед запуском json_encode используйте функцию utf8_encode, затем запустите json_code –

+2

«Я избежал использования' htmlspecialchars' перед строкой в ​​базе данных MySQL ». Ну, есть твоя проблема. ** Не делайте этого **. Вы должны вставлять свои данные с помощью SQL-экранирования, а не из HTML-экранирования. Выражение HTML должно использоваться, когда вы показываете вещи на странице и только тогда. – tadman

+0

Я пробовал, но utf8_encode не работает в этом случае –

ответ

-1

Наконец-то я получил решение. Поскольку мои данные в базе данных уже манипулируют с помощью htmlspecialchars и даже после удаления htmlspecialchars я не смог исправить данные, чтобы я нашел это решение для преобразования всех HTML закодированных символов обратно в исходный

Вот простой код для выполнения этой

$input = "This is the ‘text’ I fetched"; 
$output = preg_replace_callback("/(&#[0-9]+;)/", function($m) { return mb_convert_encoding($m[1], "UTF-8", "HTML-ENTITIES"); }, $input); 
echo $output; 

Referance: http://www.codewithasp.net/2016/11/html-entity-decode-to-original-php.html

ОБНОВЛЕНО

В качестве альтернативы мы можем также использовать html_entity_ декодировать, чтобы сделать то же самое, что я нашел после комментария тадмана.

+0

Не поощряйте людей писать свой собственный мусор, когда есть [встроенная функция 'html_entity_decode', которая делает это уже] (http://php.net/manual/en/function.html-entity-decode.php) , Шаг 1 - проверка документации, а не начало кодирования. – tadman

+0

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

0

Для отображения используйте этот код.

$message = "My ‘pop’ to display"; 

echo htmlspecialchars($messge, ENT_QUOTES, 'UTF-8'); 
+0

Я не использую htmlspecialchars сейчас, но все же мой текст автоматически преобразуется в My ‘ pop ’ для отображения. это проблема с сортировкой базы данных? Мой - utf8_general_ci. –

+0

Да, это проблема сортировки базы данных. когда вы вставляете данные в базу данных, чтобы пропустить html-символ, используя функцию mysql_real_escape_string. – Rajkeshar

+0

так как я могу это исправить? мне нужно использовать какую-то другую сортировку? –