【问题标题】:PHP filter string input, cut off all newlines, 1 charsPHP过滤字符串输入,切断所有换行符,1个字符
【发布时间】:2010-12-17 22:23:03
【问题描述】:

我正在用 PHP 编写代码!

有一个用户字符串输入,我想切断所有换行符,1 个连续超过 1 个字符(避免 <br /><br />...)。

示例:

I am a




SPaMmEr!

会变成:

I am a
SPaMmEr!

I am a
.
.
.
.
SPaMmEr!

同样

【问题讨论】:

  • 连续超过 1 个字符是什么意思?
  • 要转义 HTML 标签,您可以将它们放在反引号中。 (`)

标签: php html input filter


【解决方案1】:

通过这种方式获取所有行(如果你想捕捉 dos、mac 和 unix 换行符):

$lines = explode("\n", str_replace(array("\r\n", "\r"), "\n", $string));

使用preg_grep()可以过滤多个字符的行:

$lines = preg_grep('/^.{2}/', $lines);

或者使用正则表达式完成整个过程:

preg_match_all('/^.{2}.*$/', $string, $matches);
$lines = $matches[0];

或者,如果您不需要包含所有剩余行的数组,则可以通过一次调用删除不需要的字符串:

$string = preg_replace('/^.?$\n/m', '', $string);

【讨论】:

    【解决方案2】:

    这个怎么样:

    $str = str_replace(array("\n", "\r"), '', $str);
    

    $str 是您的用户输入。

    编辑

    抱歉,此代码无论如何都会删除所有行,但仍可能派上用场。

    【讨论】:

      【解决方案3】:

      \n 是换行符以及 \r\n 和 \n\r 的有效输入。运行 Regex 或 str_replace 将 \r 和 \n 的所有组合替换为 \n,您可以使用 explode("\n", $string) 并检查数组的所有项目是否有一个字符或空字符。 您可以删除这些,或将其替换为重复字符的单个实例,例如我对新段落使用一个换行符,所以它会破坏这样的。

      【讨论】:

        【解决方案4】:

        为什么不为此使用正则表达式:

        ## replace 1 or more new line symbols with single new line symbol
        $empty_lines_trimmed = preg_replace('"(\r?\n)+"', "\n", $empty_lines);
        

        【讨论】:

          猜你喜欢
          • 2011-08-22
          • 2012-06-26
          • 2021-01-25
          • 2015-08-06
          • 2014-03-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多