【问题标题】:Remain spaces and newline chars during article sanitization在文章清理期间保留空格和换行符
【发布时间】:2016-06-29 16:56:35
【问题描述】:

我尝试创建类似 sanitize article 功能的东西。我的意思是清理或规范化显示在 html 博客网站中的文章内容的功能。

它必须删除除\n 之外的所有空格。所以换行和空格。

我开始了一个想法,通过 addcslashes php 函数对换行符和空格进行编码。然后删除所有出现的空格。然后使用stripslashes。然后用单个替换多个 \x20 出现。因此,对于正则表达式操作来说,它类似于换行符和空格的临时休眠。

但我没有成功,因为输出没有输入中确实存在的换行符。

在线版https://ideone.com/I4oZCJ

我的代码不起作用:

<?php
    $text = 'first line
second line';
    $text = addcslashes($text, "\x20\t");
    $text = preg_replace('/\s+/', ' ', $text);
    $text = stripslashes($text);
    $text = preg_replace('/\s+/', ' ', $text);
    var_dump($text);

如何获得?

谢谢

【问题讨论】:

    标签: php regex string char


    【解决方案1】:

    您可以使用\h 类替换水平空白字符:

    preg_replace('/\h+/', ' ', $text');
    

    Demo

    或者,您可以创建自己的字符类,排除您不想要替换的所有字符:

     preg_replace('/[^\S\n]+/', ' ', $text);
    

    基本上,这匹配所有不是\S(非空白)和\n(没有换行符)的字符。两者都有效。

    【讨论】:

    • 我使用了这些模式。 CR 空格,我的意思是\r,被空格替换了。它应该已被删除。可以在线查看:ideone.com/ebP1Q4
    • @trzczy 先调用str_replace("\r", '', $text) 然后,尽可能快速轻松地删除您要删除的字符
    • 但是 "\r" 不是 "\h" 忽略的唯一垂直空格。过滤器应该是“除空格和 \n 之外的每个 \s”。调查是对一篇文章invisible chars进行归一化,让strlen对可见chars进行计数。
    【解决方案2】:

    https://ideone.com/hJrH8R

    <?php
    function clean($text) {
        $text = preg_replace('/[\cK\f\r\x85]+/', '', $text);
        $text = preg_replace('/\h+/', ' ', $text);
        return  $text;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-15
      • 1970-01-01
      • 1970-01-01
      • 2020-11-28
      • 2019-03-17
      • 2012-10-22
      • 2012-03-18
      相关资源
      最近更新 更多