Работа с блоками текста
Перечисленные ниже функции чаще всего оказываются полезны, если нужно проводить однотипные операции с многострочными блоками текста, заданными в строковой переменной.
string str_replace(string $from, string $to, string $str)
Заменяет в строке $str все вхождения подстроки $from (с учетом регистра) на $to и возвращает результат. Исходная строка, переданная третьим параметром, при этом не меняется. Эта функция работает значительно быстрее, чем ereg_replace(), которую мы рассмотрим в главе о регулярных выражениях PHP, и ее часто используют, если нет необходимости в каких-то экзотических правилах поиска подстроки. Например, вот так мы можем заместить все символы перевода строки на их HTML-эквивалент— тэг <br>:
$st=str_replace("\n","<br>\n",$st)
Как видим, то, что в строке <br>\n тоже есть символ перевода строки, никак не влияет на работу функции, т. е. функция производит лишь однократный проход по строке. Для решения описанной задачи также применима функция nl2br(), которая работает чуть быстрее.
string nl2br(string $string)
Заменяет в строке все символы новой строки \n на <br>\n и возвращает результат. Исходная строка не изменяется.
Обратите внимание на то, что символы \r, которые присутствуют в конце строки текстовых файлов Windows, этой функцией никак не учитываются, а потому остаются на старом месте.
string WordWrap(string $st, int $width=75, string $break="\n")
Эта функция, наконец-то появившаяся в PHP версии 4, оказывается невероятно полезной при форматировании текста письма перед автоматической отправкой его адресату при помощи mail(). Она разбивает блок текста $st на несколько строк, завершаемых символами $break, так, чтобы на одной строке было не более $width
букв. Разбиение происходит по границе слова, так что текст остается читаемым. Возвращается получившаяся строка с символами перевода строки, заданными в $break. Давайте рассмотрим пример, как мы можем отформатировать некоторый текст по ширине поля 60 символов, предварив каждую строку префиксом ">" (то есть, оформить его как цитирование, принятое в электронной переписке):
function Cite($OurText, $prefix="> ")
{ $st=WordWrap($OurText, 60-strlen($prefix), "\n");
$st=$prefix.str_replace("\n","\n$prefix",$st);
// можно было бы сделать это и одной операцией, но так,
// по-моему, несколько универсальнее.
return $st;
}
string strip_tags (string $str [, string $allowable_tags])
Эта функция удаляет из строки все тэги и возвращает результат. В параметре $allowable_tags можно передать тэги, которые не следует удалять из строки. Они должны перечисляться вплотную друг к другу. Вот пример:
$st="
<b>Жирный текст</b>
<tt>Моноширинный текст</tt>
<a href=http://www.dklab.ru>Ссылка</a>";
echo "Исходный текст: $st";
echo "<hr>После удаления тэгов: ".strip_tags($st,"<a><b>")."<hr>";
Запустив этот пример, мы сможем заметить, что тэги <a>
и <b> не были удалены (ровно как и их парные закрывающие), в то время как <tt>
исчез.
string str_repeat(string $st, string $number)
Функция "повторяет"
строку $st $number раз и возвращает объединенный результат. Вот пример:
echo str_repeat("test!",3); // выводит test!test!test!