Каков наилучший способ «дезинфекции» контента? Пример…
Пример. Перед дезинфекцией:
Morbi mollis ante vitae massa suscipit a tempus est pellentesque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla mattis iaculis consectetur. Morbi mollis ante vitae est pellentesque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla mattis iaculis consectetur.
Пример – после дезинфекции:
<p>Morbi mollis ante vitae massa suscipit a tempus est pellentesque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla mattis iaculis consectetur.</p> <p>Morbi mollis ante vitae est pellentesque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla mattis iaculis consectetur.</p>
Что он должен делать
Правильно знаю, что я использую функцию str_replace
и это должно быть лучшим решением для этого?
Я хочу, чтобы функция выглядела так:
function sanitize($content) { // Do the magic! return $content; }
Запустите его через нечто вроде интерпретатора Textile или Markdown или любого другого гуманного языка разметки, который подходит вашим потребностям.
Зачем беспокоиться? Когда HTML отображается как документ, несколько символов пробела сокращаются до одного места, нет? Большинство ваших проблем решают сами.
function sanitize($content) { // leading white space $content = preg_replace('!^\s+!m', '', $content); // trailing white space $content = preg_replace('![ \t]+$!m', '', $content); // tabs and multiple white space $content = preg_replace('![ \t]+!', ' ', $content); // multiple newlines $content = preg_replace('![\r\n]+!', "\n", $content); // paragraphs $content = preg_replace('!(.+)!m', '<p>$1</p>', $content); // done return $content; }
Пример:
$s = <<<END Morbi mollis ante vitae massa suscipit a tempus est pellentesque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla mattis iaculis consectetur. Morbi mollis ante vitae est pellentesque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla mattis iaculis consectetur. END; $out = sanitize($s);
Вывод:
<p>Morbi mollis ante vitae massa suscipit a tempus est pellentesque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla mattis iaculis consectetur.</p> <p>Morbi mollis ante vitae est pellentesque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla mattis iaculis consectetur.</p>
Взгляните на класс Sanitize CakePHP .
Аккуратный!!
Существует довольно устаревшая статья о zend, но посмотрите пример, который они дают: