Для генератора iCal, над которым я работаю, мне нужно убедиться, что каждые 75 символов строка разбивается следующим образом:
$string = "This is a long text. I use this text to demonstrate the PHP wordwrap function.";
$newstring = wordwrap($string, 75, "\r\n ", TRUE);
echo($newstring);
Результат:
This is a long text. I use this text to demonstrate the PHP wordwrap
function.
iCal интерпретирует первый пробел (из параметра разрыва слова) как индикатор того, что свойство текста продолжается.
Функция переноса слов удаляет второй пробел (из строки). После декодирования содержимого iCal текст будет выглядеть следующим образом:
This is a long text. I use this text to demonstrate the PHP wordwrapfunction.
Как я могу обойти это? Я не хочу, чтобы пространство из строки (между «wordwrap» и «function») было удалено.
Я должен использовать chunk_split
вместо. Это сохранит пространство, а также не будет пытаться обернуть пространство, которое мне не нужно.
$string = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaannnnnn";
$newstring = rtrim(chunk_split($string, 75, "\r\n "), "\r\n ");
echo($newstring);
Пространство сохранилось:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaannnnnn
rtrim
также используется, как chunk_split
всегда добавляет end
,
Это не будет считать пространство внутри end
, тем не мение. Так что, если есть несколько строк, на самом деле может быть 76 символов. Я изменил chunklen
параметр до 74, так как это достаточно хорошо для моего случая использования.
Хорошо, при выполнении переноса по словам пропустите дополнительный пробел, чтобы пространство между переносом по тексту и функцией было сохранено.
Использовать этот
$newstring = wordwrap($string, 75, " \r\n", TRUE);
Вместо
$newstring = wordwrap($string, 75, "\r\n", TRUE);
Вывод до iCal:
This is a long text. I use this text to demonstrate the PHP wordwrap
function.
Вывод после iCal:
This is a long text. I use this text to demonstrate the PHP wordwrap function.