Задать вопрос
Diversia
@Diversia

Как подсчитать точное кол-во смс?

Здравствуйте.

Есть скрипт для подсчета кол-ва смс:
$smsCountSym = strlen($message);
if (preg_match('/[А-Яа-яёЁ]/iu', $message))
{
	$smsPart = ceil($smsCountSym / 70);
}
else
{
	$smsPart = ceil($smsCountSym / 140);
}

но он не учитывает склейку сообщений и спец символы, которые увеличивают кол-во символов в смс.

Вот что удалось уточнить:
Одно длинное сообщение может разбиваться на несколько SMS, за каждое из которых снимается отдельная плата. Одно SMS может содержать 70 символов с нелатинскими буквами (например, на русском) или 160 символов только с латинскими буквами. Для передачи более длинного сообщения оно разбивается на несколько SMS, и в каждое SMS добавляется специальный заголовок (UDH), позволяющий телефону объединить полученные части в одно длинное сообщение, и максимальная длина каждой SMS в этом случае становится 67 символов для нелатинских и 153 для латинских букв. Часть символов, например, "№`" не относятся к латинским, поэтому сообщения, содержащие подобные символы, кодируются, как сообщения с нелатинскими символами. Также существуют некоторые спецсимволы, для кодирования которых используются всегда 2 символа — это "{}[]^~\|€".

Но это скорее всего не все. Может быть кто-то сталкивался с такой же задачей? Поделитесь пожалуйста решением.
  • Вопрос задан
  • 699 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Diversia
@Diversia Автор вопроса
Сделал так:
function messagePart($message)
{
	$smsCountSym = strlen($message);
	$arChars  = array('[', ']', '{', '}', '|', '^', '~', '€', '№');

	foreach($arChars as $query)
	{
		if (strpos($message, $query) !== false) {$chars = true;}
	}

	if (preg_match('/[А-Яа-яёЁ]/iu', $message) || $chars == true)
	{
	  if ($smsCountSym <= 70)
	  {
		$smsPart = 1;
	  }
	  else
	  {
		$smsPart = ceil($smsCountSym / 67);
	  }
	}
	else
	{
	  if ($smsCountSym <= 160)
	  {
		$smsPart = 1;
	  }
	  else
	  {
		$smsPart = ceil($smsCountSym / 153);
	  }
	}
	return $smsPart;
}

Что скажите?
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы