Перенос строки по указанному количеству символов
Есть текст: Привет малыш! Как дела?
Нужно перенести слово "малыш" между слловами "Как дела?", чтоб получился в итоге текст: Привет! Как малыш дела? Слышал что вроде есть функция wordwrap. Что-то она не срабатывает для такого дела. Или этой функцией такое не сделать, нужно один текст заменять на другой функцией str_replace или strtr, этот вариант не покатит с помощью этой функции? <html><body> <?php $t = "Привет малыш! Как дела?"; echo wordwrap($t,8," "); ?> </body></html> |
нет, wordwrap — перенос части строки на новую строку.
т.е. с помощью wordwrap можно сделать так: $str = "Привет, малыш! Как дела?"; $str2 = wordwrap(str,15); $str2 равна "Привет, малыш!<br/>Как дела?": Привет, малышь! Как дела? Чтобы меня слова местами нужно заменять подстроки, либо обращаться к строке как к массиву и пенять местами элементы. |
Только перенос слов?Какая-то функция ненужная.
<?php $str = "Привет, малыш! Как дела?"; $str2 = wordwrap($str,15,"<br />"); echo $str2; ?> |
Цитата:
нужная функция :) когда в очень длинную строку нужно добавить разделители через определенную длину — wordwrap срабатывает значительно быстрее других способов. |
Код:
<html><body> $st = wordwrap($ourText,$maxlen-strlen($prefix),"\n"); $st = $prefix.str_replace("\n","\n$prefix",$st); Что вот это за действие? $prefix.str_replace почему точка "."? Что делает первая строка? |
1. первая строка кода в строке $ourText через каждый 18 символов добавляет перенос строки \n
18, потому что функции в качестве второго аргумента передаётся 20, а в качестве третьего — "> ". $maxlen-strlen($prefix) = 20 минус (длина третьего аргумента). 2. str_replace("\n","\n$prefix",$st); замена символа переноса строки на перенос строки + "> " $st = $prefix.str_replace("\n","\n$prefix",$st); точка — конкатенация, т.е. склеивание строк. $st станет равна "> "+ то, что получится после замены :) |
Передача 2 параметру было 20, значит переменная $maxlen перелпределяется в значение 20. В строке 20-2=18 символов вывести на одну строку?
$maxlen-strlen($prefix) |
Цитата:
|
Попробовал в этой строке убрать $prefix. вывело все то же самое, только в первой строке не поставило перед текстом знак ">",а в остальных строках поставило. получается конкатенация в этом месте с переменной $prefix. нужна лишь для первой строки?
Код:
$st = $prefix.str_replace("\n","\n$prefix",$st); |
Цитата:
|
"\n" - это перевод строки для внутреннего кода, но не при выводе на экран, для вывода на экран используется <br>. Скажите, почему <br> не стоит в этом коде, но после каждых 18 символов переход происходить на след.строку? Ведь в функции wordwrap в качестве перевода строки стоит \n но не br, следовательно если \n тогда на экране не должно переводить, переводить должно только если br разделитель.
|
Цитата:
а \n — это escape-последовательность т.е. <br> переносит строку только когда имеем дело с html, а \n — работает везде (редакторы, программы и т.д.) в html они выполняют почти одну и туже функцию — переносят строку, но есть одно различие: если поле, где осуществляется перевод однострочное, к примеру, <input type='text'> или <input type='password'>, <input type='date'>, то <br> не сработает, \n работает всегда. <br /> — это просто тег, который обрабатывает браузер, как знак к переносу, но сама изначальная строка при этом остаётся целой: $str = "Вася<br />Маша<br />Петя" — это одна строка и переносить её будет только браузер. $str = "Вася\nМаша\nПетя" — а это уже переносить будет не только браузер, но и всё, где бы мы ни выводили эту строку. Чтобы было понятно, напиши так: <?php echo("Вася<br />Маша<br />Петя<br \>"); echo("---------------------------------"); echo("\nВася\nМаша\nПетя"); ?> Запусти и открой в браузере "посмотреть исходный код". с \n там слова сами перенесутся на новую строку, а с <br> останутся на одной |
Вижу прикол один, если написать так:
echo("\nВася\nМаша\nПетя"); Выведет просто в одну строку: Вася Петя Маша Но если написать так: echo("<pre>\nВася\nМаша\nПетя</pre>"); Каждое слово выведет с другой строки. Получается значит если внутри тега встречается вот такой выражение: "\n" сам тег PRE переводить слово на другую букву. |
Цитата:
без тегов браузер и \n не будет воспринимать, ибо всё, что к нему идёт — если нет тегов, воспринимается одной неразрывной строкой. |
Цитата:
echo("<b>\nВася\nМаша\nПетя</b>"); или echo("<p>\nВася\nМаша\nПетя</p>"); или echo("<tt>\nВася\nМаша\nПетя</tt>"); перевод на другую строку не сработает, а с PRE пашет. Вот загадочный этот PRE |
Цитата:
значит вот оно и ещё одно отличие :) извиняюсь. что ввёл в заблуждение. |
Часовой пояс GMT +3, время: 16:40. |