$prepare = htmlspecialchars($source);
$prepare = replace('< ; br&qt;', '<br>', $prepare);
nl2br(htmlspecialchars($a['text']))
Цитата (AllesKlar @ 27.04.2017 - 12:36) |
htmlspecialchars заменяет не теги, а символы. Существует конечный список символов, которые она заменяет: & (амперсанд) => & " (двойные кавычки) => " ' (одинарные кавычки) => ' < (меньше) => < > (больше) => > Так что, игнорирование некоторых тегов тебе придется реализовать вручную. Например, перед использованием htmlspecialchars заменить необходимые теги на собственные метасущности, потом htmlspecialchars, потом метасущности назад в теги. Или же $prepare = htmlspecialchars($source); |
Цитата (Guest @ 27.04.2017 - 14:19) | ||
да, вроче пойдет вариант. но я где-то видел вроде что еще функция отдельная есть, или там только по регулярным выражениям? |
$prepare = replace('< ; br&qt;', '<br>', $prepare);
Цитата (qpurypaHT @ 27.04.2017 - 11:16) |
nl2br(htmlspecialchars($a['text'])) |
Цитата (karm @ 27.04.2017 - 12:21) |
а как подставить несколько значений? |
Цитата (AllesKlar @ 27.04.2017 - 16:31) | ||||
Садись, двойка.
|
$i = '<b>Текст</b><br/><i> проверочный</i>';
echo strip_tags($i);
echo '<br/>';
echo '<br/>';
echo strip_tags($i, '<br> <b>');
Цитата (qpurypaHT @ 27.04.2017 - 15:14) |
ТОгда так
|
Цитата (karm @ 27.04.2017 - 17:32) | ||
во, то что нужно)) а нужно добавлять закрывающий тег? <b></b> или один можно? |
Цитата (karm @ 27.04.2017 - 10:21) |
мне нужно обрабатывать текст функцией htmlspecialchars, но при этом чтобы определенные теги, не обрабатывались(<b></b>,<p></p>)? |
Цитата (karm @ 27.04.2017 - 13:32) |
во, то что нужно |
Цитата (AllesKlar @ 27.04.2017 - 17:02) |
Как вы это делаете? |
Цитата (karm @ 27.04.2017 - 11:32) |
во, то что нужно)) |
Цитата (karm @ 27.04.2017 - 11:32) |
во, то что нужно)) |
<?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;