无法删除以PHP结尾的怪异的返回字符/行

时间:2018-11-19 21:39:32

标签: php regex

我有一个PHP函数,可从我的数据生成XML文件。其中一些是通过textarea字段提交的。

当我创建XML文件时,显示的textarea字段在值的末尾带有不寻常的回车符。我尝试使用以下方法删除,这些方法都不做任何事情。

trim($value)
str_replace( "\n", "", $value)
str_replace( "\r", "", $value)
str_replace( "\n\r", "", $value)
str_replace( "\r\n", "", $value)
preg_replace('/\s\s+/', ' ', $value)

甚至尝试了strip_tags($ value)和html_entity_decode($ value),以防万一我可以删除它。

确实删除它的一件事是通过正则表达式删除了所有字母数字字符,但这没用,因为我的用户希望使用很多字符,例如破折号,方括号,单引号和双引号等。

是否有其他方法可以删除像这样的奇怪字符?还是我可以通过代码删除的任何其他奇怪的回车符?

2 个答案:

答案 0 :(得分:2)

您可以使用

$value = preg_replace('/\R+/u', ' ', $value)

在这里,\R与任何Unicode换行符序列匹配。

另外,请参见/u modifier reference

  

u (PCRE_UTF8)
  此修改器打开了与Perl不兼容的PCRE的其他功能。模式和主题字符串被视为UTF-8。

答案 1 :(得分:0)

我也有类似的情况。就我而言,有一个不间断的Unicode字符,看起来像一个空格,但不是。

您可以执行的操作是遍历字符串中的所有字符,并逐个检查它们,以查看有什么奇怪。这可能不会直接解决您的问题,但至少可以帮助您找到希望的解决方案。

for( $i = 0; $i < strlen($value); $i++ ) {
    $chr = $value[$i];
    echo "{$i}: [$chr}] [".ord($chr)."];\n";
}