Как убрать аттрибуты тэга
взято отсюда http://www.askdev.ru/a/2703
без регулярного выражения:
С использованием регулярного выражения:
Убираем выбранные тэги
Кроме этого народ пишет прямо о вашей задаче:
URL: http://tim.mackey.ie/CommentView,guid,2ece42de-a334-4fd0-8f94-53c6602d5718.aspx
The PHP Code appears in Post Comments
А еще есть HTML-Tidy с опцией Word-2000
У меня иногда складывается впечатление, что у вас заблокирован поиск.
Элементарно!1. Вырезать все тэги, которые не попадают под стандарты W3C (порой проще оставить только те, которые могут использоваться, и аттрибуты, которые позволительно использовать) ( это делается с помощью массива тегов и одного регулярного выражения )
Обычно, на сайтах все элементы (заголовки, абзацы, списки и проч., в том числе и таблицы) стилизованы. И правила для их вывода уже определены. Это исключает использование в "текстах" классы и стили. Убивайте все на корню!2. Убрать все inline стили и классы, которые плодит Word
Пожайлуй, вы получите после этого чистый текст.
взято отсюда http://www.askdev.ru/a/2703
без регулярного выражения:
function strip_attr($msg, $tag, $attr, $suffix = "") {
$lengthfirst = 0;
while (strstr(substr($msg, $lengthfirst), "<$tag ") != "") {
$tag_start = $lengthfirst + strpos(substr($msg, $lengthfirst), "<$tag ");
$partafterwith = substr($msg, $tag_start);
$img = substr($partafterwith, 0, strpos($partafterwith, ">") + 1);
$img = str_replace(" =", "=", $img);
$out = "<$tag";
for($i = 0; $i < count($attr); $i++) {
if (empty($attr[$i])) {
continue;
}
$long_val =
(strpos($img, " ", strpos($img, $attr[$i] . "=")) === false) ?
strpos($img, ">", strpos($img, $attr[$i] . "=")) – (strpos($img, $attr[$i] . "=") +strlen($attr[$i]) + 1) :
strpos($img, " ", strpos($img, $attr[$i] . "=")) – (strpos($img, $attr[$i] . "=") +strlen($attr[$i]) + 1);
$val = substr($img, strpos($img, $attr[$i] . "=") + strlen($attr[$i]) + 1,$long_val);
if (!empty($val)) {
$out .= " " . $attr[$i] . "=" . $val;
}
}
if (!empty($suffix)) {
$out .= " " . $suffix;
}
$out .= ">";
$partafter = substr($partafterwith, strpos($partafterwith, ">") + 1);
$msg = substr($msg, 0, $tag_start) . $out . $partafter;
$lengthfirst = $tag_start + 3;
}
return $msg;
}
$lengthfirst = 0;
while (strstr(substr($msg, $lengthfirst), "<$tag ") != "") {
$tag_start = $lengthfirst + strpos(substr($msg, $lengthfirst), "<$tag ");
$partafterwith = substr($msg, $tag_start);
$img = substr($partafterwith, 0, strpos($partafterwith, ">") + 1);
$img = str_replace(" =", "=", $img);
$out = "<$tag";
for($i = 0; $i < count($attr); $i++) {
if (empty($attr[$i])) {
continue;
}
$long_val =
(strpos($img, " ", strpos($img, $attr[$i] . "=")) === false) ?
strpos($img, ">", strpos($img, $attr[$i] . "=")) – (strpos($img, $attr[$i] . "=") +strlen($attr[$i]) + 1) :
strpos($img, " ", strpos($img, $attr[$i] . "=")) – (strpos($img, $attr[$i] . "=") +strlen($attr[$i]) + 1);
$val = substr($img, strpos($img, $attr[$i] . "=") + strlen($attr[$i]) + 1,$long_val);
if (!empty($val)) {
$out .= " " . $attr[$i] . "=" . $val;
}
}
if (!empty($suffix)) {
$out .= " " . $suffix;
}
$out .= ">";
$partafter = substr($partafterwith, strpos($partafterwith, ">") + 1);
$msg = substr($msg, 0, $tag_start) . $out . $partafter;
$lengthfirst = $tag_start + 3;
}
return $msg;
}
С использованием регулярного выражения:
function strip_attr( $htmlString ) {
$regEx = '/([^<]*<\s*[a-z](?:[0-9]|[a-z]{0,9}))(?:(?:\s*[a-z\-]{2,14}\s*=\s*(?:"[^"]*"|\'[^\']*\'))*)(\s*\/?>[^<]*)/i';
$chunks = preg_split($regEx, $htmlString, -1, PREG_SPLIT_DELIM_CAPTURE);
$chunkCount = count($chunks);
$strippedString = '';
for ($n = 1; $n < $chunkCount; $n++) {
$strippedString .= $chunks[$n];
}
return $strippedString;
}
$regEx = '/([^<]*<\s*[a-z](?:[0-9]|[a-z]{0,9}))(?:(?:\s*[a-z\-]{2,14}\s*=\s*(?:"[^"]*"|\'[^\']*\'))*)(\s*\/?>[^<]*)/i';
$chunks = preg_split($regEx, $htmlString, -1, PREG_SPLIT_DELIM_CAPTURE);
$chunkCount = count($chunks);
$strippedString = '';
for ($n = 1; $n < $chunkCount; $n++) {
$strippedString .= $chunks[$n];
}
return $strippedString;
}
Как убрать лишние тэги
Убираем выбранные тэги
function strip_selected_tags($str, $tags = "", $stripContent = false)
{
preg_match_all("/<([^>]+)>/i", $tags, $allTags, PREG_PATTERN_ORDER);
foreach ($allTags[1] as $tag) {
$replace = "%(<$tag.*?>)(.*?)(<\/$tag.*?>)%is";
$replace2 = "%(<$tag.*?>)%is";
echo $replace;
if ($stripContent) {
$str = preg_replace($replace,'',$str);
$str = preg_replace($replace2,'',$str);
}
$str = preg_replace($replace,'${2}',$str);
$str = preg_replace($replace2,'${2}',$str);
}
return $str;
}
{
preg_match_all("/<([^>]+)>/i", $tags, $allTags, PREG_PATTERN_ORDER);
foreach ($allTags[1] as $tag) {
$replace = "%(<$tag.*?>)(.*?)(<\/$tag.*?>)%is";
$replace2 = "%(<$tag.*?>)%is";
echo $replace;
if ($stripContent) {
$str = preg_replace($replace,'',$str);
$str = preg_replace($replace2,'',$str);
}
$str = preg_replace($replace,'${2}',$str);
$str = preg_replace($replace2,'${2}',$str);
}
return $str;
}
Убираем ненужное, кроме указанных тэгов
function removeUnsafeAttributesAndGivenTags($input, $validTags = '') {
$regex = '#\s*<(/?\w+)\s+(?:on\w+\s*=\s*(["\'\s])?.+?\(\1?.+?\1?\);?\1?|style=["\'].+?["\'])\s*>#is';
return preg_replace($regex, '<${1}>',strip_tags($input, $validTags));
}
$regex = '#\s*<(/?\w+)\s+(?:on\w+\s*=\s*(["\'\s])?.+?\(\1?.+?\1?\);?\1?|style=["\'].+?["\'])\s*>#is';
return preg_replace($regex, '<${1}>',strip_tags($input, $validTags));
}
Кроме этого народ пишет прямо о вашей задаче:
Clean Word HTML using Regular Expressions
URL: http://tim.mackey.ie/CommentView,guid,2ece42de-a334-4fd0-8f94-53c6602d5718.aspx
The PHP Code appears in Post Comments
function cleanHTML($html) {
/// <summary>
/// Removes all FONT and SPAN tags, and all Class and Style attributes.
/// Designed to get rid of non-standard Microsoft Word HTML tags.
/// </summary>
// start by completely removing all unwanted tags
$html = ereg_replace("<(/)?(font|span|del|ins)[^>]*>","",$html);
// then run another pass over the html (twice), removing unwanted attributes
$html = ereg_replace("<([^>]*)(class|lang|style|size|face)=(\"[^\"]*\"|'[^']*'|[^>]+)([^>]*)>","<\\1>",$html);
$html = ereg_replace("<([^>]*)(class|lang|style|size|face)=(\"[^\"]*\"|'[^']*'|[^>]+)([^>]*)>","<\\1>",$html);
return $html
}
/// <summary>
/// Removes all FONT and SPAN tags, and all Class and Style attributes.
/// Designed to get rid of non-standard Microsoft Word HTML tags.
/// </summary>
// start by completely removing all unwanted tags
$html = ereg_replace("<(/)?(font|span|del|ins)[^>]*>","",$html);
// then run another pass over the html (twice), removing unwanted attributes
$html = ereg_replace("<([^>]*)(class|lang|style|size|face)=(\"[^\"]*\"|'[^']*'|[^>]+)([^>]*)>","<\\1>",$html);
$html = ereg_replace("<([^>]*)(class|lang|style|size|face)=(\"[^\"]*\"|'[^']*'|[^>]+)([^>]*)>","<\\1>",$html);
return $html
}
А еще есть HTML-Tidy с опцией Word-2000
У меня иногда складывается впечатление, что у вас заблокирован поиск.
Комментариев нет:
Отправить комментарий