Лучший способ хранить &(амперсанд) в базе данных MySQL

Я создаю список категорий и не знаю, как сохранить символ амперсанда в базе данных MySQL. Есть ли проблема/недостаток, если я использую '&'. Есть ли отличия от использования в формате html '&amp'?


person inrob    schedule 28.07.2012    source источник
comment
Прочтите эту ссылку   -  person Mr. Alien    schedule 29.07.2012
comment
Небольшое исправление: сущность & должна заканчиваться точкой с запятой.   -  person halfer    schedule 29.07.2012


Ответы (5)


Использование '&' экономит несколько байтов. Это не специальный символ для MySQL. Вы можете легко создать & для вывода позже с помощью PHP-метода htmlspecialchars(). Когда ваше поле предназначено для хранения простой информации, вы должны использовать только обычный текст, так как в целом это более гибко, поскольку вы можете создавать различные виды разметки и т. д. позже. Исключение: разметка создается пользователем, чьи макеты вы хотите сохранить вместе с текстом (как при вводе форматированного текста). Если у вас есть теги и т. д. во входных данных, вы можете использовать & для согласованности.

person Chris    schedule 28.07.2012
comment
Будут ли проблемы, если я сделаю это: $cat_name = 'Cars & Parts'; эхо $cat_name; или это обязательно сделать так: $cat_name = htmlspecialchars($cat_name) ? Спасибо за ваш ответ. - person inrob; 29.07.2012
comment
Это не обязательно. htmlspecialchars() также заботится о кавычках и символах < и >. Если вы выводите Cars Parts в контексте html, браузер отобразит & для &amp;. Опять же, я бы, вероятно, не стал хранить &amp; в базе данных. - person Chris; 29.07.2012
comment
Ага я так решил. Я собираюсь хранить их как &. Спасибо за ваш ответ. Хорошего дня. - person inrob; 29.07.2012

Вы должны хранить его как &amp;, только если поле в БД содержит HTML (например, <span class="bold">some text</span> &amp; more). В этом случае вы должны быть очень осторожны с XSS.

Если поле содержит некоторые общие данные (например, имя пользователя, заголовок и т. д.), вам следует экранировать его только тогда, когда вы помещаете его в свой HTML (используя htmlentities).

person Vatev    schedule 28.07.2012

Сохранение его как &amp; является подходящим методом. Вы можете повторить его или использовать в операторах как &amp;.

person ryno    schedule 28.07.2012
comment
И когда я повторяю «& amp», он будет отображаться как «&» или он должен использовать какую-то функцию php, чтобы перевести его в символ «&»? - person inrob; 29.07.2012
comment
Как изучающий php, я предлагаю вам просто попробовать. Честно говоря, это лучший способ учиться. - person ryno; 29.07.2012
comment
и ты можешь сбежать, если захочешь. - person ryno; 29.07.2012
comment
да, я попробовал, он отображается правильно, я думаю, я собираюсь использовать &, как вы и большинство других предложили здесь :) Спасибо за ваш ответ. - person inrob; 29.07.2012

Мы постоянно храним '&' в полях базы данных, это нормально (по крайней мере, я никогда не слышал другого аргумента).

Если вы когда-либо используете строку только на HTML-странице, вы можете просто сохранить HTML-безопасную версию &amp;, я полагаю. Я бы предположил, что лучше хранить '&' и экранировать его при чтении (на случай, если в будущем вам понадобится использовать строку в контексте, отличном от HTML).

person Dave S    schedule 28.07.2012

Используйте &amp;, если вы хотите иметь правильный HTML или избежать проблем, например cut&copy (браузер отображает его как cut©).

person Victor    schedule 28.07.2012