4

哪种是“清理”内容的最佳方式?一个例子...

示例 - 消毒前:

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-tags 而不是像换行符一样。
  • 它应该删除空白空间,如三倍空间
  • 它应该删除双换行符。
  • 它应该删除标签。
  • 它应该删除内容之前的换行符和空格(如果有)。
  • 它应该删除内容后的换行符和空格(如果有)。

知道我使用该str_replace功能,它应该是一个更好的解决方案吗?

我希望函数看起来像这样:

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

4 回答 4

6
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>
于 2010-03-21T14:21:15.750 回答
6
  • 它应该添加 p-tags 而不是像换行符一样。

通过 Textile 解释器、Markdown 或任何其他适合您需要的人性化标记语言来运行它。

  • 它应该删除空白空间,如三倍空间
  • 它应该删除双换行符。
  • 它应该删除标签。
  • 它应该删除内容之前的换行符和空格(如果有)。
  • 它应该删除内容后的换行符和空格(如果有)。

何苦?当 HTML 呈现为文档时,多个空白字符会减少到一个空格,不是吗?你的大部分问题都会自行解决。

于 2010-03-21T14:26:48.953 回答
3

看一下CakePHP的Sanitize类。

于 2010-03-21T14:14:58.153 回答
1

整齐的!!

关于 zend 有一篇相当过时的文章,但请查看他们给出的示例:

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

于 2010-03-21T14:53:19.250 回答