2015-09-25 2 views
4

данных в моей таблице базы данных MySQL имеет специальные символы, такие как «&».Предотвратить кодирование существующих HTML-сущностей (конвертировать и в & но не & к & амп;)

При использовании тогда мне нужно преобразовать их в &. Я использовал htmlspecialchars для преобразования их в объекты HTML.

Но несколько записей уже имеют &, и он преобразует их в &. Мне нужно, чтобы они использовались как без преобразования.

Что делать?

+0

Этот вопрос очень запутан. У вас есть данные в базе данных, содержащей '&', вы используете 'htmlspecialchars()', чтобы превратить их в объекты HTML, но есть и другие записи в базе данных, которые имеют '&', но вы не хотите, чтобы эти конкретные записи чтобы их '&' преобразован 'htmlspecialchars()' ??? – Ohgodwhy

+0

Вы, скорее всего, захотите использовать регулярное выражение для выполнения этого. Возможно, что-то вроде '& (?! amp;)' должно идентифицировать «голые» амперсанды. – CollinD

+3

@ohgodwhy У него есть смесь данных. Некоторые безопасны для html, некоторые нет. Он просит просто очистить голые амперсанды, но не амперсанды, которые уже экранизированы как '&' – CollinD

ответ

2

Я думаю, что лучшим решением является их декодирование в первую очередь. Обычный & останется нетронутым, но & будет декодирован до &.

Затем закодируйте их снова, чтобы преобразовать & и другие специальные символы в их закодированный эквивалент. Код короче объяснения. :)

$text = 'Your text with &s from the database'; 
// Decode and re-encode the special characters. 
$text = htmlspecialchars(htmlspecialchars_decode($text)); 

Если у вас есть другие объекты в там же (как é для é), вместо htmlspecialchars, вы можете также использовать htmlentities и html_entity_decode. Решение такое же, но вы можете проверить, какой из них дает лучший результат для вас.

$text = 'Your text with &s from the database'; 
// Decode and re-encode the special characters and other entities. 
$text = htmlentities(html_entity_decode($text)); 

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

0

Я предпочитаю хранить чистый текст в БД.

& остается &, é остается é и т.д ...

только при чтении из БД в 'собрать' содержимое HTML я использую htmlspecialchars().

Таким образом, я знаю, что то, что хранится, может использоваться везде, независимо от того, является ли это html или text.

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