Элегантное решение для разрывов строк (PHP)
$var = "Hi there"."<br/>"."Welcome to my website"."<br/>;"
echo $var;
Существует ли элегантный способ обработки разрывов строк в PHP? Я не уверен насчет других языков, но в C++ есть eol
, так что что-то более читаемое и элегантное в использовании?
Спасибо
8 answers
Для разрывов строк, PHP как "\n"
( см. строки в двойных кавычках) и PHP_EOL
.
Здесь вы используете <br />
, который не является разрывом строки PHP: это разрыв строки HTML.
Здесь вы можете упростить то, что вы опубликовали (с помощью разрывов строк HTML): нет необходимости в объединении строк: вы можете поместить все в одну строку, например:
$var = "Hi there<br/>Welcome to my website<br/>";
Или, используя разрывы строк PHP:
$var = "Hi there\nWelcome to my website\n";
Примечание: вы могли бы также хотите взглянуть на nl2br()
функция, которая вставляет <br>
перед \n
.
Я определил это:
if (PHP_SAPI === 'cli')
{
define( "LNBR", PHP_EOL);
}
else
{
define( "LNBR", "<BR/>");
}
После этого используйте LNBR
везде, где я хочу использовать \n
.
В разрывах строк php мы можем использовать PHP_EOL (КОНЕЦ СТРОКИ). он работает как "\n" , но его нельзя отобразить на странице ht ml. потому что мы должны дать разрыв HTML, чтобы разорвать строку..
Таким образом, вы можете использовать его с помощью define
define ("EOL","<br>");
Тогда вы можете назвать это
В итоге я написал функцию, которая до сих пор хорошо работала для меня:
// pretty print data
function out($data, $label = NULL) {
$CLI = (php_sapi_name() === 'cli') ? 'cli' : '';
$gettype = gettype($data);
if (isset($label)) {
if ($CLI) { $label = $label . ': '; }
else { $label = '<b>'.$label.'</b>: '; }
}
if ($gettype == 'string' || $gettype == 'integer' || $gettype == 'double' || $gettype == 'boolean') {
if ($CLI) { echo $label . $data . "\n"; }
else { echo $label . $data . "<br/>"; }
}
else {
if ($CLI) { echo $label . print_r($data,1) . "\n"; }
else { echo $label . "<pre>".print_r($data,1)."</pre>"; }
}
}
// Usage
out('Hello world!');
$var = 'Hello Stackoverflow!';
out($var, 'Label');
Поскольку вы выводите данные в браузер, вы должны использовать <br/>
. В противном случае есть \n
и \r
или оба вместе взятые.
Ну, как и в любом языке, есть несколько способов сделать это.
Как упоминали предыдущие ответчики, "<br/>"
не является разрывом строки в традиционном смысле, это разрыв строки HTML. Я не знаю встроенной константы PHP для этого, но вы всегда можете определить свою собственную:
// Something like this, but call it whatever you like
const HTML_LINEBREAK = "<br/>";
Если вы выводите несколько строк (например, из массива строк), вы можете использовать его следующим образом:
// Output an array of strings
$myStrings = Array('Line1','Line2','Line3');
echo implode(HTML_LINEBREAK,$myStrings);
Однако, вообще говоря, я бы сказал, избегайте жесткого кодирования HTML внутри вашего Операторы PHP echo/print. Если вы можете сохранить HTML вне кода, это сделает вещи намного более гибкими и удобными для обслуживания в долгосрочной перспективе.
Не очень "элегантно" и вроде как бесполезно, но если вам действительно важно, как выглядит код, вы могли бы создать свой собственный модный флаг, а затем сделать str_replace.
Example:<br />
$myoutput = "After this sentence there is a line break.<b>.|..</b> Here is a new line.";<br />
$myoutput = str_replace(".|..","<br />",$myoutput);<br />
Или
how about:<br />
$myoutput = "After this sentence there is a line break.<b>E(*)3</b> Here is a new line.";<br />
$myoutput = str_replace("E(*)3","<br />",$myoutput);<br />
Я называю первый метод "стилем среднего пальца", а второй "стилем козла".
\n у меня не получилось. \n отображается в тексте письма, которое я отправлял.. вот как я решил эту проблему.
Str_pad($input, 990);//так, чтобы пробелы заполнялись до отрезка 990.