PDA

Просмотр полной версии : Prce


juggy
23.06.2005, 13:29
Это, ну тут бы не могли бы вы подсказать.
Вот есть у меня строка$source= "<tag id=\"abc\">SomeContent \n\n\n\</tag>\n\n\n";Моя задача стереть все \n что вне тэга. Любого тэга. Вот. Логика заменить все \n внутри тэгов на символ, потом реплейсить все \n на "" а потом уже все символы ( на который мы заменяли) обратно на \n

preg_match_all("!<([^>]*)>(.*?)</([^>]*)>!is",$source,$match); // -- working вот так, он мне находит всё что внутри тэгов.
И так находит.
$source = preg_replace("!<([^>]*)>(.*?)</([^>]*)>!is","\\0<br />\\1<br />\\2<br />\\3<br />",$source);

А реплейсить не хочет никак. Как я не пробовал. Помогайте, я уже совсем в ауте.

Constantine
23.06.2005, 15:38
Если стереть все \n вне тэга, то так:
$source=preg_replace("/<([^>]*)>([^<]*)<\/([^>]*)>\n+/i","<\\1>\\2</\\3>",$source);

juggy
23.06.2005, 15:52
работает, но как-то странно. тестирую.

juggy
23.06.2005, 15:55
/** Based on Smarty */
function trimWhiteSpace($source)
{
preg_match_all("!<script[^>]+>.*?</script>!is", $source, $match);
$_script_blocks = $match[0];
$source = preg_replace("!<script[^>]+>.*?</script>!is",
'@@@CMS:TRIM:SCRIPT@@@', $source);

// Pull out the pre blocks
preg_match_all("!<pre>.*?</pre>!is", $source, $match);
$_pre_blocks = $match[0];
$source = preg_replace("!<pre>.*?</pre>!is",
'@@@CMS:TRIM:PRE@@@', $source);

// remove all leading spaces, tabs and carriage returns NOT
// preceeded by a php close tag.
$source = preg_replace('/((?<!\?>)\n)[\s]+/m', '\1', $source);
$source = preg_replace('!<\!--.*?-->!is','',$source);

// replace script blocks
foreach($_script_blocks as $curr_block) {
$source = preg_replace("!@@@CMS:TRIM:SCRIPT@@@!",$curr_block,$source,1);
}
// replace pre blocks
foreach($_pre_blocks as $curr_block) {
$source = preg_replace("!@@@CMS:TRIM:PRE@@@!",$curr_block,$source,1);
}
$source=preg_replace("/<([^>]*)>([^<]*)<\/([^>]*)>\n+/i","<\\1>\\2</\\3>",$source);
return $source;
}

Получилось вот что. Но оно нихрена вообще не вытягивает код в одну строку, как я хотел бы...

Constantine
23.06.2005, 16:01
бррррр! а зачем вообще такое?

juggy
23.06.2005, 16:02
чистить Html-код перед выводом. сокращать траффик клиента и скорость загрузки страницы - соответственно.

Constantine
23.06.2005, 16:11
тада не понятно, зачем мы сначала ищем блоки, а потом их вычищаем, скриптовые, например... не проще ли засунуть все выражения в массив и вычистить за один проход...
А, млин, понял... :D
а вообще, знаю только один подходящий случай для такой чистки - мс ворд, вот там больше 50% уходит...

juggy
23.06.2005, 16:31
MsWord в том числе

Constantine
23.06.2005, 17:13
Да, надо ещё после нулевых тэгов зачистить... как-то так:
$source=preg_replace("/<([^>]*)\/>\n+/i","<\\1/>",$source);