2009-08-30 2 views
0

В настоящее время я разрабатываю скрипт, который принимает сообщение, разбивает его каждые 100 символов и отправляет каждую часть.preg_split - New Line

Однако моя исходная строка имеет в ней строки "\ n", и это вызывает проблему с моим preg_split, в результате чего он разбивается досрочно (например, до 100 символов).

Вот что я работаю с:

$sMessage = "Msg from John Smith \n". 
      "SUBJ: Hello! \n". 
      "This is the bulk of the message and can be well over 200 or 300 characters long. \n". 
      "To reply, type R 131, then ur msg."; 


$split = preg_split('/(.{0,100})\s/', 
       $sMessage, 
       0, 
       PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); 
    array_shift($split); 

    $count = count($split); 
    foreach ($split as $key => $message) { 
    $part = sprintf("(%d/%d) %s", $key+1, $count, $message); 
    echo $part; 
    echo "<br>"; 
    } 

Теперь, с этим, я заметил 3 вещи:

1) Первая часть сообщения («Msg от Джона Смита») даже не включается в массив.

2) Новые строки (\ n), кажется, режут строку раньше.

3) Как ни странно, с последней строкой сообщения («Ответить» и т. Д.) Он отсекает последнее слово («msg.») И добавляет это в новую строку, независимо от того, что предложение может быть прочитано.

Любая помощь по этому вопросу будет замечательной!

+0

Спасибо за ответ, однако, мне нужна каждая «часть», чтобы быть отдельными частями массива, чтобы я мог отправлять каждую строку символов «100» отдельно. Используя wordwrap, это все еще одна строка. Как я могу отделить его от нескольких строк? – Dodinas

ответ

2

Вы на самом деле пытаетесь переопределить функцию wordwrap(). Я думаю, что вызов, который делает работу вам нужно будет выглядеть следующим образом:

$array = explode("\n", wordwrap($string, 100, "\n", true)); 
+0

Оставьте мой комментарий выше. – Dodinas

+0

Вы правы, забыл, что он возвращает строку. Но преобразование этого в массив просто. Thie функция 'explode()': http://us2.php.net/manual/en/function.explode.php – soulmerge

1

моя исходная строка имеет «\ п» линии в ней

Используйте модификатор PCRE_DOTALL, чтобы позволить ". для соответствия новостям.

С помощью str_split можно легко выполнить цепочку строк в массив строк с фиксированной длиной. Как предполагает soulmerge, wordwrap, вероятно, лучше, если это то, что вы действительно пытаетесь сделать. Вы можете использовать explode для последующего разделения строки на массив.

Избегайте прибегать к регулярному выражению, где доступны функции обработки строк. (И PHP имеет много.)