[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как обработать post с html символами?
micro
Есть текстовое поле (textarea), нужно чтобы при нажатии на кнопку обработались все html теги, кроме некоторых..
Если сделать:
$text = htmlspecialchars($text);

То все теги не будут работать, а как сделать так, чтобы хоть тег <b> работал?



Спустя 41 минута, 58 секунд (21.02.2012 - 23:07) Placido написал(а):
Я бы предложил перед выводом обработать регуляркой. Вот для тегов <b><i><u>
$text = preg_replace('#[&]lt;(/*[biu])[&]gt;#', '<$1>', $text);


Форум & lt; и & gt; (без пробелов) режет :) Квадратные скобки вокруг & можно убрать.

Спустя 5 минут, 36 секунд (21.02.2012 - 23:13) Commander Keen написал(а):
Или написать свой вариант htmlspecialchars().

Placido
Не стал бы я такую задачу решать регулярными выражениями... Но, кто как...

Спустя 10 минут, 48 секунд (21.02.2012 - 23:24) Winston написал(а):
Нужно писать свою обертку.

Спустя 12 минут, 49 секунд (21.02.2012 - 23:37) micro написал(а):
Цитата (Winston @ 21.02.2012 - 20:24)
Нужно писать свою обертку.

А вот каким именно методом?

Спустя 6 часов, 29 минут, 6 секунд (22.02.2012 - 06:06) Игорь_Vasinsky написал(а):
таким
Цитата
Или написать свой вариант htmlspecialchars().

Спустя 8 часов, 32 минуты, 7 секунд (22.02.2012 - 14:38) SlavaFr написал(а):
решил написать для разминки
Возможны ошибки, так как писал на паузе :)

/**
* htmlspecialchars with exclude tags
*
@autor SlavaFr
*
@param string $string |input string
*
@param array $excludetags | array with exclude tags @example array('br','i','b');
*
@param int $flags | @default ENT_COMPAT |@see param $flags in htmlspecialchars php.net
*
@param string $encoding | @default UTF-8 |@see param $encoding in htmlspecialchars php.net
*
@param bool $double_encode | @default true | @see param $double_encode in htmlspecialchars php.net
*
@return string
*/

function htmlspecialchars_exclude($string ,
$excludetags,
$flags=null ,
$encoding = 'UTF-8' ,
$double_encode = true ){
if(empty($excludetags)){
$excludetags=array();
}

if(empty($flags))$flags= ENT_COMPAT;
$start = md5('<'.time());
$end = md5('>'.time());
$dbquot = md5('"'.time());
$quot = md5("'".time());

foreach($excludetags as $tag){
$maskquotes=create_function('$matches',
'return \''.$start.'\'.str_replace(array(\'"\',"\'"),
array(
\''.$dbquot.'\',\''.$quot.'\'),$matches[1]).\''.$end.'\';');

foreach(array('@<('.$tag.'\s[^>]*)>@isu','@<('.$tag.')>@isu','@</('.$tag.')>@iu') as $reg){
$string=preg_replace_callback($reg,$maskquotes, $string);
}

}


$string=htmlspecialchars($string, $flags, $encoding,$double_encode);
return str_replace(array($start,$end,$dbquot,$quot),array('<','>','"',"'"),$string);
}

#------------------------------------------
#test
#-----------------------------------------

$str='<html><br />
<head><br />
<title>

</title>
</head>
<body>
<b
style="color:red">Blja blja</b>
<br>
</body>'
;

echo htmlspecialchars_exclude($str,array('b','br'));

Спустя 22 часа, 16 минут, 40 секунд (23.02.2012 - 12:54) Turos написал(а):
Цитата
решил написать для разминки


в чем преимущество между обычным htmlspecialchars с последующим регэкспом???

Спустя 3 часа, 55 минут, 31 секунда (23.02.2012 - 16:50) SlavaFr написал(а):
Цитата (Turos @ 23.02.2012 - 09:54)
Цитата
решил написать для разминки


в чем преимущество между обычным htmlspecialchars с последующим регэкспом???

не какого smile.gif

Спустя 6 дней, 9 часов, 22 минуты, 59 секунд (1.03.2012 - 02:13) gaserge написал(а):
в скорости)))

помойму еще попроще можно было написать через strtr


_____________
Смерть, наверное самое лучшее изобретение жизни. © Стив Джобс
Быстрый ответ:

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