[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Разрешить определенные теги
karm
Всем привет. У меня такой вопрос - мне нужно обрабатывать текст функцией htmlspecialchars, но при этом чтобы определенные теги, не обрабатывались(<b></b>,<p></p>)?
AllesKlar
htmlspecialchars заменяет не теги, а символы.
Существует конечный список символов, которые она заменяет:

& (амперсанд) => &amp;
" (двойные кавычки) => &quot;
' (одинарные кавычки) => '
< (меньше) => &lt;
> (больше) => &gt;

Так что, игнорирование некоторых тегов тебе придется реализовать вручную.
Например, перед использованием htmlspecialchars заменить необходимые теги на собственные метасущности, потом htmlspecialchars, потом метасущности назад в теги.

Или же
$prepare = htmlspecialchars($source);
$prepare = replace('&lt ; br&qt;', '<br>', $prepare);


_____________
[продано копирайтерам]
qpurypaHT
nl2br(htmlspecialchars($a['text']))


_____________
Если долго в одних стенах живешь, ты с ними сростаешься
Guest
Цитата (AllesKlar @ 27.04.2017 - 12:36)
htmlspecialchars заменяет не теги, а символы.
Существует конечный список символов, которые она заменяет:

& (амперсанд) => &amp;
" (двойные кавычки) => &quot;
' (одинарные кавычки) => '
< (меньше) => &lt;
> (больше) => &gt;

Так что, игнорирование некоторых тегов тебе придется реализовать вручную.
Например, перед использованием htmlspecialchars заменить необходимые теги на собственные метасущности, потом htmlspecialchars, потом метасущности назад в теги.

Или же
$prepare = htmlspecialchars($source);
$prepare = replace('&lt ; br&qt;', '<br>', $prepare);

да, вроче пойдет вариант. но я где-то видел вроде что еще функция отдельная есть, или там только по регулярным выражениям?
karm
Цитата (Guest @ 27.04.2017 - 14:19)
Цитата (AllesKlar @ 27.04.2017 - 12:36)
htmlspecialchars заменяет не теги, а символы.
Существует конечный список символов, которые она заменяет:

& (амперсанд) => &amp;
" (двойные кавычки) => &quot;
' (одинарные кавычки) => '
< (меньше) => &lt;
> (больше) => &gt;

Так что, игнорирование некоторых тегов тебе придется реализовать вручную.
Например, перед использованием htmlspecialchars заменить необходимые теги на собственные метасущности, потом htmlspecialchars, потом метасущности назад в теги.

Или же
<pre class="sh_sourceCode" rel="php"><span class="sh_variable">$prepare</span> <span class="sh_symbol">=</span> <span class="sh_function">htmlspecialchars</span><span class="sh_symbol">(</span><span class="sh_variable">$source</span><span class="sh_symbol">);</span>
<span class="sh_variable">$prepare</span> <span class="sh_symbol">=</span> <span class="sh_function">replace</span><span class="sh_symbol">(</span><span class="sh_string">'&lt ; br&qt;'</span><span class="sh_symbol">,</span> <span class="sh_string">'<br>'</span><span class="sh_symbol">,</span> <span class="sh_variable">$prepare</span><span class="sh_symbol">);</span></pre>

да, вроче пойдет вариант. но я где-то видел вроде что еще функция отдельная есть, или там только по регулярным выражениям?


да, вроче пойдет вариант. но я где-то видел вроде что еще функция отдельная есть, или там только по регулярным выражениям?
$prepare = replace('&lt ; br&qt;', '<br>', $prepare);

а как подставить несколько значений?

qpurypaHT, по моему это не подойдет)
AllesKlar
Цитата (qpurypaHT @ 27.04.2017 - 11:16)
nl2br(htmlspecialchars($a['text']))

Садись, двойка.

Цитата (karm @ 27.04.2017 - 12:21)
а как подставить несколько значений?

http://php.net/manual/ru/function.str-replace.php

_____________
[продано копирайтерам]
qpurypaHT
Цитата (AllesKlar @ 27.04.2017 - 16:31)
Цитата (qpurypaHT @ 27.04.2017 - 11:16)
nl2br(htmlspecialchars($a['text']))

Садись, двойка.

Цитата (karm @ 27.04.2017 - 12:21)
а как подставить несколько значений?

О, а я не так посмотрел, я думал там у него <br> написан. Подумал, что при записи в БД у него не учитывается он

_____________
Если долго в одних стенах живешь, ты с ними сростаешься
qpurypaHT
ТОгда так


$i = '<b>Текст</b><br/><i> проверочный</i>';
echo strip_tags($i);
echo '<br/>';
echo '<br/>';
echo strip_tags($i, '<br> <b>');


_____________
Если долго в одних стенах живешь, ты с ними сростаешься
karm
Цитата (qpurypaHT @ 27.04.2017 - 15:14)
ТОгда так


$i = '<b>Текст</b><br/><i> проверочный</i>';
echo strip_tags($i);
echo '<br/>';
echo '<br/>';
echo strip_tags($i, '<br> <b>');

во, то что нужно)) а нужно добавлять закрывающий тег? <b></b> или один можно?
qpurypaHT
Цитата (karm @ 27.04.2017 - 17:32)
Цитата (qpurypaHT @ 27.04.2017 - 15:14)
ТОгда так


$i = '<b>Текст</b><br/><i> проверочный</i>';
echo strip_tags($i);
echo '<br/>';
echo '<br/>';
echo strip_tags($i, '<br> <b>');

во, то что нужно)) а нужно добавлять закрывающий тег? <b></b> или один можно?

нет не нужно

_____________
Если долго в одних стенах живешь, ты с ними сростаешься
AllesKlar
Офигеть. Приходит ТС и говорит:
Цитата (karm @ 27.04.2017 - 10:21)
мне нужно обрабатывать текст функцией htmlspecialchars, но при этом чтобы определенные теги, не обрабатывались(<b></b>,<p></p>)?


Приходит qpurypaHT и предлагает решение, в котором теги не обрабатываются htmlspecialchars, а просто удаляются.

ТС отвечает:
Цитата (karm @ 27.04.2017 - 13:32)
во, то что нужно



Как вы это делаете? blink.gif

_____________
[продано копирайтерам]
VeRTak
Цитата (AllesKlar @ 27.04.2017 - 17:02)
Как вы это делаете?


Это русские laugh.gif Тебе из Германии не понять biggrin.gif
twin
Цитата (karm @ 27.04.2017 - 11:32)
во, то что нужно))
Я не совсем понял, для чего это, но с уверенностью 99% могу сказать - хочется безопасности.
Если это так, то это не
Цитата (karm @ 27.04.2017 - 11:32)
во, то что нужно))
потому что толку от этого нет.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Arh
<?php

# htmlspecialchars() с исключениями
function specialChars ($text, array $tags = []) {

if (isset($tags['code']) || array_search('code', $tags) !== false) {

preg_match_all('!<code[ a-zA-Zа-яА-Я0-9./"=:_@%?\-]*>(.*?)</code>!isU', $text, $code);

if (!empty($code[0])) {

foreach ($code[1] as $key => $v) {

$code[2][$key] = htmlspecialchars($v);
$code[3][$key] = '{{{code-' . $key . '}}}';

}

$text = str_replace($code[1], $code[3], $text);

}

}


if (!empty($tags)) {

foreach ($tags as $key => $value) {

$attr = is_array($value) ? '(([ ]+[' . implode('|', $value) . ']*[ ]?=[ ]?"[ a-zA-Zа-яА-Я0-9./:_@%?\-]*")*)?' : '([ ])?';
$tag = is_array($value) ? $key : $value;
$pattern1[] = '$<([/])?' . $tag . $attr . '(.*?)?>$iu';
$pattern2[] = '$\[([/])?' . $tag . $attr . '\]$iu';
$replacement1[] = '[$1' . $tag . '$2]';
$replacement2[] = '<$1' . $tag . '$2>';

}

$text = preg_replace($pattern1, $replacement1, $text);
$text = htmlspecialchars($text, ENT_NOQUOTES);
$text = preg_replace($pattern2, $replacement2, $text);

if (!empty($code[0])) {

$text = str_replace($code[3], $code[2], $text);

}

return $text;

} else {

return htmlspecialchars($text);

}

}


$text = '
<strong>strong</strong>
<b>b</b>
<p>p</p>
<div class="test">div</div>
<img src="" alt="img">
<code class="html"><div>div</div></code>
'
;

$text = specialChars($text, [
'strong',
'p',
'img' => ['src', 'alt'],
'code' => ['class']
]);


echo $text;


Потестируй, писал 100 лет назад, уже хз как оно работает)

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.