0

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 "\n" but when i use strlen, it only counts "\n" as 1 character while the SMS server count "\n" 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 "\n". So that it will be as the following example.

SMS 1
Item A $160
Item B $170

SMS 2
Item C $180

2 Answers 2

1

Use the following code :

$array = explode("\n",$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;
    }
}
Sign up to request clarification or add additional context in comments.

2 Comments

Thanks! Your code is buggy but I've build something based on your example!
@DamianSia Please add the corrected code for future references. People may not read your comment and use the code directly.
0

First split messages by lines like that:

$messageParts = array();
$messageLines = explode("\n", $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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.