Лучший способ дезинфицировать контент с помощью PHP? - PullRequest
4 голосов
/ 21 марта 2010

Какой самый лучший способ «санировать» контент?Пример ...

Пример - до санации:

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>

Что он должен делать

  • Он должен добавлять p-теги вместо разрыва строки, как.
  • Он должен удалять пустое пространство, как тройные пробелы
  • Он должен удалять двойные разрывы строк.
  • Он должен удалять вкладки.
  • Он должен удалять разрывы строк и пробелы перед содержимым, если таковые имеются.
  • Он должен удалять разрывы строки пробелы после содержимого, если оно есть.

Правильно знаете, я использую функцию str_replace, и это должно быть лучшим решением для этого?

Я хочу, чтобы функциявыглядеть так:

function sanitize($content)
{
    // Do the magic!
    return $content;
}

Ответы [ 4 ]

6 голосов
/ 21 марта 2010
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>
6 голосов
/ 21 марта 2010
  • Он должен добавить p-теги вместо разрыва строки, как.

Запустить его через что-то вроде текстового интерпретатора, или Markdown, или любого другого гуманного языка разметки который соответствует вашим потребностям.

  • Он должен удалять пустое пространство, как тройные пробелы
  • Он должен удалять двойные разрывы строк.
  • Он должен удалять вкладки.
  • Он должен удалять разрывы строк и пробелы перед содержимым, если таковые имеются.
  • Он должен удалять разрывы строк и пробелы после содержимого, если таковые имеются.

Зачем беспокоиться?Когда HTML отображается как документ, несколько символов пробела уменьшаются до одного пробела, нет?Большинство ваших проблем решают сами.

3 голосов
/ 21 марта 2010

Взгляните на Sanitize класс CakePHP .

1 голос
/ 21 марта 2010

Tidy !!

На Zend есть довольно устаревшая статья, но посмотрите пример, который они приводят:

http://devzone.zend.com/article/761

...