2
Я разрабатываю систему чата php с mysqli, где один из моих кодов чата - <3
, как и Facebook.Как разбить теги, но сохранить непревзойденные `<` коды
Проблема
Моя проблема заключается в том, что, когда я не добавить полосы теги к сообщению, передаваемому членом, если сообщения <script> alert('What is this'); ?>
отображается исходный текст. Но когда я добавляю
<?php $message = strip_tags($message); ?>
... он удаляет тег из сообщения, но и ломает <3
. Я также пробовал htmlentities и htmlspecialchars, но они оба конвертируют <3
в свою форму html.
ВОПРОС
Как я могу лишить мое сообщение из тегов, но по-прежнему позволяют коды с помощью непревзойденной <
, такие как <3
? Например <script>
должно быть разрешено но не</script>
и <?php ?>
не должно быть разрешено но <anything
должно быть разрешено.
Я отредактировал ваш вопрос для наглядности, но есть несколько моментов, на которые я не был уверен. Что вы имеете в виду, когда говорите, что '<3'« не может работать »? (Я заменил «перерывы», что имеет смысл, но слишком расплывчато.) Кроме того, не совсем ясно (по крайней мере, для меня), что общий фактор между «<ничего» и «
(Оговорка: я никогда не использовал PHP или MSQLI, так что возможно, я понятия не имею, о чем я говорю.)
Рассматривали ли вы предварительной обработки сообщений, предназначенных для сканирования для символьных комбинаций вы хотите «сохранить» из метки-зачистки до, передавая строку теге-стриптизершу?
Я не знаю, как работает тег-стриппер, но я предполагаю, что он включает в себя некоторый способ избежать символов
<
, чтобы они не были признаны в качестве тегов. Если вы ищете строки сообщений для последовательности<3
и вставьте\
, чтобы они стали\<3
, что делает этот стриптиза для тегов? Будет ли это соответствовать вашим потребностям?Если вы не можете избежать специальных кодов, вы можете просто заменить их чем-то, что не похоже на HTML. Например, сообщение
пользователя:
I <3 <b>You</b>!
Предварительно обработанный вариант (поиск и замену):I ###HEART### <b>You</b>!
Pass помечать-стриптизерша:I ###HEART### You!
Наконец, замените###HEART###
с символом сердца.EDIT: Согласно ответу Petroff, это, вероятно, лучше использовать
<3
(который является HTML-код для<3
).Если символы вы выводя являются юникода точки, например, если
<3
должен статьU-2665
, почему бы просто не выполнить что поиск и замена сначала? Точка unicode не будет включать<
, поэтому она не будет распознана как тег.источник
2015-03-08 09:36:21
Вы можете заменить
<3
на<3
, так как strip_tags не сможет его сломать. Вы можете увидеть таблицу html codes здесь: http://www.ascii.cl/htmlcodes.htmисточник
2015-03-08 09:44:32 Petroff