Можно использовать по идее Кавычкер
Вариант который на предыдущих цмсках использовал я (там заодно e-mail "пряталка" простенькая)
function encode_email($txt) {
$n = strlen($txt);
for($i = 0; $i<$n; $i++) {
$a = substr($txt, $i, 1);
$new .= sprintf('&#%s;', ord($a));
}
return $new;
}
function kavych ($contents)
{
// Copyright (c) Spectator.ru
// замена кавычек в html-тэгах на символ "¬"
$contents=preg_replace ( "/<([^>]*)>/es", "'<'.str_replace ('\\\"', '¬','\\1').'>'", $contents);
// замена кавычек внутри <code> на символ "¬"
$contents=preg_replace ( "/<code>(.*?)<\/code>/es", "'<code>'.str_replace ('\\\"', '¬','\\1').'</code>'", $contents);
// расстановка кавычек: кавычка, перед которой идет ( или > или пробел = начало слова,
// кавычка, после которой не идет пробел = это конец слова.
$contents=preg_replace ( "/([>(\s])(\")([^\"]*)([^\s\"(])(\")/", "\\1«\\3\\4»", $contents);
// что, остались в тексте нераставленные кавычки? значит есть вложенные!
if (stristr ($contents, '"')):
// расставляем оставшиеся кавычки (еще раз).
$contents=preg_replace ( "/([>(\s])(\")([^\"]*)([^\s\"(])(\")/", "\\1«\\3\\4»", $contents);
// расставляем вложенные кавычки
// видим: комбинация из идущих двух подряд открывающихся кавычек без закрывающей
// значит, вторая кавычка - вложенная. меняем ее и идущую после нее, на вложенную (132 и 147)
while (preg_match ("/(«)([^»]*)(«)/", $contents)) $contents=preg_replace ( "/(«)([^»]*)(«)([^»]*)(»)/", "\\1\\2„\\4“", $contents);
// конец вложенным кавычкам
endif;
// кавычки снаружу
$contents = preg_replace("/\<a\s+href([^>]*)\>\s*\«([^<^«^»]*)\»\s*\<\/a\>/", "«<a href\\1>\\2</a>»", $contents);
// расстанавливаем правильные коды, тире и многоточия
$contents = str_replace ('«','«', $contents);
$contents = str_replace ('»','»', $contents);
$contents = str_replace (' - ',' — ', $contents);
$contents = str_replace ('...','…', $contents);
// тире в начале строки (диалоги)
$contents = preg_replace ('/([>|\s])- /',"\\1— ", $contents);
// меняем "¬" обратно на кавычки
$contents = str_replace ('¬','"', $contents);
// предлоги вместе со словом (слово не переносится на другую строку отдельно от предлога)
$contents = preg_replace("/ (.) (.)/", " \\1 \\2", $contents);
$contents = preg_replace("'((?:mailto:)?[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+\.[a-zA-Z]{2,3})'e",'encode_email("$1")', $contents);
// дефисы
// $contents = preg_replace("/(\s[^- >]*)-([^ - >]*\s)/", "<nobr>\\1-\\2</nobr>", $contents);
return $contents;
}
но проблема, что
$modx->documentOutput = kavych($modx->documentOutput);
- полностью весь код странички заменяет, что есть неправильно - как-бы выцепить только область контента,
например ограниченного определёнными тегами <!-- content_begin --> <!-- content_end -->