【问题标题】:Removing all control and non-printing characters except newline, carriage return, tab and spacing删除除换行符、回车符、制表符和间距之外的所有控制和非打印字符
【发布时间】:2013-04-09 11:11:40
【问题描述】:

请原谅我,但是当我查看正则表达式时,它就像一只盯着新栅栏的山羊。

这 (/\p{C}+/u) 似乎工作正常,但去掉了换行符/回车符和制表符:

$str = "
<pre>
    te" . chr(31) . "st

   test
</pre>
";

echo $str;
echo preg_replace('/\p{C}+/u', '',$str);

我怎么把它们留在里面?

【问题讨论】:

    标签: php regex preg-replace


    【解决方案1】:

    试一试:

    $str = "
    <pre>
        te" . chr(31) . "st
    
       test
    </pre>
    ";
    
    echo $str;
    echo '=====================================',"\n";
    echo preg_replace('/[^\P{C}\s]+/u', '',$str);
    

    我刚刚否定了属性\p{C},并将它添加到一个否定字符类中,该类也包括所有空格字符。

    【讨论】:

    • 我花了好几个小时试图弄清楚为什么每次我尝试从数据库中对字符串进行 json_decode 时它就会爆炸。最后我把它缩小到一个特定的记录,并认为字符串中的某个地方一定有一个坏字符,我不得不保留换行符,但想删除破坏 json_decode 的坏字符......经过几个小时的搜索我找到了完美的答案。如果你 4 年前没有回答这个问题,我可能会花上几个小时来解决这个问题。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 2017-03-12
    • 1970-01-01
    • 2019-11-19
    相关资源
    最近更新 更多