"я пытаюсь вывести текст в одну строку без разрывов строки

Я пытаюсь вывести текст в одну строку без разрывов строк. Я пытался использовать nl2br, а затем заменить все /n или /r ничем. Я хочу, чтобы вывод был:

«Я пытаюсь написать свой текст в одну строку»

вместо:

"Я" пытаюсь написать свой текст

в одну строку"

<!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>

person DigiNet Events    schedule 15.09.2019    source источник


Ответы (2)


Если не использовать nl2br и заменять пробелом, а не пустой строкой, ваш код должен работать нормально (обратите внимание, что вы можете оптимизировать 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, вам нужно заменить пробелы неразрывными пробелами, например.

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

Вот демонстрация использования &nbsp; в JS:

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>

person Nick    schedule 15.09.2019

Просто 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 - удаляются символы новой строки, но не элементы html, добавленные nl2br.

В будущем, пожалуйста, включите неправильный вывод, который вы видите, в свой пост вместе с кодом!

person Kayla Fuchs    schedule 15.09.2019