Сохранение специальных символов в БД, а затем отображение с использованием PHP

0

У меня есть script, который кэширует несколько RSS-каналов, однако я заметил, что начал получать странные символы, появляющиеся на странице, где я вывожу содержимое в кеш-памяти (хранится в БД).

Например, RSS-канал содержит символы: Introducing…: ...

Что следует читать: Introducing...: ...

Однако моя страница отображает это как: Introducing…: ...

Кажется, что эти незнакомые символы фактически хранятся в базе данных, как это.

Может кто подскажет, где я могу ошибиться?

Нужно ли кодировать на пути в базу данных декодирование на выходе?

Теги:

3 ответа

1

Вам нужно убедиться, что кодировка RSS-канала такая же, как в вашей БД. В противном случае вам сначала нужно преобразовать содержимое.

Кодирование фида должно быть в заголовке XML:

<?xml version="1.0" encoding="UTF-8"?>

Вы можете использовать эту функцию для преобразования ее в кодировку, используемую вами в БД (предпочтительно UTF-8):

http://php.net/manual/function.mb-convert-encoding.php

0

Когда вы используете UTF-8, убедитесь, что вы установили соединение с базой данных с utf-8.. f.e. в mysql

SET NAMES 'utf-8';

Затем установите правильный выходной контент-тип, как описано Энтони Уильямсом. В лучшем случае вы оба: установите META Content-Type и отправьте HTTP-заголовок Content-Type.

Поскольку ваше приложение, по-видимому, расшифровывает htmlentities этого кэшированного RSS-канала перед тем, как записывать их в БД, вы также можете выводить их, как вы их получили в первую очередь

<?php echo htmlentities($string, ENT_QUOTES, 'UTF-8'); ?>
0

Тот факт, что на выходе есть 3 плохих символа, предполагает, что RSS-канал интерпретируется так, что ссылка на символ HTML преобразуется в UTF-8.

Попробуйте настроить текстовое кодирование вашей страницы отображения на UTF-8, добавив следующее в выходной HTML в разделе <head>:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

В качестве альтернативы, поскольку это PHP, вы можете напрямую настроить HTTP-заголовок:

<?php
header("Content-Type: text/html; charset=UTF-8");
?>

Тем не менее, лучшим решением может быть отказ от преобразования объекта в первую очередь. Получили ли вы вызов html_entity_decode() в коде, который извлекает RSS-канал? Если это так, тогда было бы разумно удалить его.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню