PHP 不会从导入的 Facebook 描述数据中删除正则表达式换行符

PHP Regex line-breaks won't be removed from imported Facebook description data

我快要发疯了。我正在尝试从 php 中的字符串中删除行结尾,但似乎没有任何现有方法有效,我无法理解为什么不这样做。

我试过以下方法:

$result = str_replace(array("\n", "\r"), '', $string));
$result = preg_replace("/\n/, '', $string"));
$result = preg_replace("/\n|/r|/s/, '', $string")); // this one does remove the whitespace though
$result = str_replace(PHP_EOL, '',trim(rtrim($string)));

还有很多很多变化...

这让我觉得可能是其他原因导致了问题,因为我的测试很简单。

var_dump($originalString);
$test = " stringl \n";
$testWithoutLineBreak = preg_replace("/\n/", '', $test);
$originalString = preg_replace("/\n/", '', $originalString);
var_dump($test);
var_dump($testWithoutLineBreak);
var_dump($originalString);

给出以下结果:

string(13) " stringl
"
string(10) " stringl 
"
string(9) " stringl "
string(13) " stringl
"

注意数字差异,我复制原始字符串的测试字符串包含 10 个带换行符的字符,而原始字符串包含 13 个字符。 另外 preg_replace 适用于我的测试字符串,但不适用于原始字符串。

最后我试着把它全部放在一个隐藏的字符显示器中:

string(13)[Space]"[Space]stringl[End of Line(LF)]
"[End of Line(LF)]
string(10)[Space]"[Space]stringl[Space][End of Line(LF)]
"[End of Line(LF)]
string(9)[Space]"[Space]stringl[Space]"[End of Line(LF)]
string(13)[Space]"[Space]stringl[End of Line(LF)]
"

那里没有结果。

有人解释过这个魔法吗?谢谢!

有时在这些情况下,您会被 characters/byte 值所欺骗,这些值在以纯文本或 HTML.

形式查看字符串时无法“看到”

例如,您可以使用 urlencode 进行值的调试输出,以便您可以确定这些位置的实际字节值是什么。

这通常有助于缩小此类问题的范围。