【问题标题】:Remove new lines from beginning and end of string in php using trim使用修剪从php中字符串的开头和结尾删除新行
【发布时间】:2020-07-13 14:11:55
【问题描述】:

我的印象是trim command in PHP,如果省略指定特定字符的第二个参数,则不仅会删除空格,还会删除字符串开头(和结尾)的新行。

此函数返回一个从 str 的开头和结尾。如果没有第二个参数, trim() 将 去掉这些字符:

" " (ASCII 32 (0x20)),一个普通的空格。 "\t" (ASCII 9 (0x09)), 一个 标签。 "\n" (ASCII 10 (0x0A)),换行(换行)。 "\r" (ASCII 13 (0x0D)),回车。 “\0”(ASCII 0 (0x00)),NUL 字节。 "\x0B" (ASCII 11 (0x0B)),垂直制表符。

但是,我将它应用于一个字符串,该字符串的开头有一些新行,是由删除的文本产生的,它留下了以下内容:

\u200b\n\nTHE TEXT I WANT STARTS HERE. I WANT TO GET RID OF EVERTHING BEFORE WORD THE

我尝试使用修剪的原因是因为我想在文本中间保留新行和格式,因为它可能会被分成段落。我只是想修剪它的边缘。

trim 应该删除字符串开头和结尾的换行符和新行,我错了吗?如上所述删除新行的正确方法是什么?

【问题讨论】:

  • “我错了 trim 应该删除字符串开头和结尾的换行符吗?” - 不,你只是错误地假设你 \u200b\n\nTHE TEXT …begin 处有 换行符 - \u200b 不是换行符,也不是 trim 将删除的空白字符列表的一部分,您从手册。
  • \u200b 是零宽度空间,\n 是新行。\n 是手册中提到的内容之一。你推荐什么代码?
  • “\n 是手册中提到的内容之一” - 是的,但它不是在开头,如果它有其他之前的东西。

标签: php newline trim


【解决方案1】:

将零长度空格字符 (\u200b) 添加到要删除的字符列表中,然后它会按预期工作。

$ws = " \t\n\r\0\x0B\u200b";
$s = trim
(
 "\u200b\n\nTHE TEXT I WANT STARTS HERE. I WANT TO GET RID OF EVERTHING BEFORE WORD THE",
 $ws
);
echo $s;

添加 NO-BREAK SPACE 字符 (\xA0) 可能是个好主意。

【讨论】:

  • 您的示例有效,因此我标记为正确。在我的具体情况下,它仍然无法正常工作..我怀疑有一些我看不到的隐藏字符。我在问题中给出的字符是字符串被 json 编码后出现的字符。如果我只是回显字符串,它会显示新行。您知道查看隐藏字符的万无一失的方法吗?
  • 我会使用 bin2hex。
  • 顺便说一句,请注意字符编码。
  • 什么是字符编码?
  • 仅供参考,我能够使用以下方法去除字符: $string = str_replace(array("\n\r", "\n", "\r"), "", $string );//摆脱新行 $string = preg_replace( '/[\x{200B}-\x{200D}]/u', '', $string);//摆脱零宽度空间。仍在研究如何使用修剪来做到这一点。
猜你喜欢
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
  • 2021-05-12
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多