PHP:根据长度然后分隔符将字符串拆分为数组

I'm trying to split a SMS message if it hits the limit of 160 characters.

This is my current code.

    $messageparts = str_split($message, 160);
    foreach($messageparts as $parts){
    sms($numbers, $parts);
    }

My current problem

  1. My SMS message includes " " but when i use strlen, it only counts " " as 1 character while the SMS server count " " as 2 characters.
  2. Currently it will split the SMS message when it hits the limit of 160 characters which is quite ugly. Example being:
SMS 1
Item A $160
Item B $170
Ite

SMS 2
m C $180

As you can see from the example, its quite a bad split. I'm looking for someone who can help so that the function can first split by character limits then delimit by the last " ". So that it will be as the following example.

SMS 1
Item A $160
Item B $170

SMS 2
Item C $180

Use the following code :

$array = explode("
",$message);
$messages = array();
$i = 0;
$newLineCharacterCount = 0;
foreach ($array as $message) {
    if ((str_len($messages[$i]) + str_len($message) + $newLineCharacterCount) <= 160) {
        $messages[$i] = $messages[$i].message;
        $newLineCharacterCount++;
    }
    else {
        $i++;
        $newLineCharacterCount = 0;
        if (str_len($message) > 160) {
            $tempMessages = str_split($message,160);
            foreach ($tempMessages as tempMessagePart) {
                $messages[$i] = tempMessagePart;
                $i++;
            }
        }
        else
            $messages[$i] = $message;
    }
}

First split messages by lines like that:

$messageParts = array();
$messageLines = explode("
", $message);

foreach ($messageLines as $line) {
   foreach (str_split($message, 160) as $part) {
       $messageParts[] = $part;
   }
}

If you want to split by "." or "," you cn use preg_split function. For example:

$keywords = preg_split("/[\.,]+/", "hypertext. language, programming");

Hope it helps.