“我试图将文本回显到一行中,没有换行符

"m trying to echo a text into one line with no line breaks

我正在尝试将文本回显到没有换行符的一行中。我尝试使用 nl2br,而不是将所有 /n 或 /r 替换为空。 我希望输出为:

"I"我想把我的文字写成一行

而不是:

"I"我正在尝试写我的文字

一行

<!DOCTYPE html>
<html>
<body>

<?php

$mytext = 'I"m trying to write my text
in one line';  

$mytext = nl2br($mytext);
$mytext = preg_replace('/\r?\n|\r/','', $mytext);
$mytext = str_replace(array("\r\n","\r","\n"),"", $mytext);
echo $mytext;

?> 

</body>
</html>

只需 preg_replace 即可。如果您需要替换的唯一字符是换行符,请尝试以下操作:

$mytext = 'I"m trying to write my text
in one line';
echo preg_replace('/\n/', ' ', $mytext); // prints I"m trying to write my text in one line

即使您没有在多行字符串中明确包含换行符,换行符也会被解释为换行符,因此您可以在正则表达式中使用 \n 来识别它。

您当前的解决方案未按预期工作的原因是 nl2br 将 html 换行符元素插入到字符串中,而不是换行符。请参阅此处的文档:https://www.php.net/manual/en/function.nl2br.php。当我 运行 你的解决方案打印 I"m trying to write my text<br />in one line - 换行符被删除,但 nl2br 添加的 html 元素没有被删除。

以后,请将您在 post 中看到的错误输出与代码一起包含在内!

除了不使用 nl2br 并且需要用 space 代替,而不是空字符串,您的代码应该可以正常工作(请注意,您可以通过使用优化 preg_replace \R 匹配任何 unicode 换行序列):

$mytext = "I'm trying to write my text\r
in one line";  

echo preg_replace('/\R/',' ', $mytext);
echo PHP_EOL;
echo str_replace(array("\r\n", "\r","\n"), " ", $mytext);

输出:

I'm trying to write my text in one line
I'm trying to write my text in one line

现在如果你想确保它保留在 HTML 中的一行,你需要用不间断的 space 替换 space,例如

$mytext = str_replace(' ', '&nbsp;', $mytext);

这是在 JS 中使用 &nbsp; 的演示:

let str = "I'm trying to write my text in one line I'm trying to write my text in one line I'm trying to write my text in one line";
$('#d1').html(str);
str = str.replace(/\s/g, '&nbsp;');
$('#d2').html(str);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="d1" style="width: 200px;"></div>
<div id="d2" style="width: 200px;"></div>