Первая серьёзная проблема, с которой сталкиваются большинство новичков при , связана с набором символов (англ. character set ). Выражается эта проблема с кодировкой в, так называемых, «кракозябриках», которые мы получаем вместо указанных в HTML-файле символов. В данной статье я хочу остановиться на проблеме с кодировкой подробнее, постараться расставить всё по полочкам и дать варианты решения.
Условно говоря, каждый символ (знак) состоит из кода и картинки . Здесь код - это уникальный идентификатор символа в наборе символов, который определяется выбранной кодировкой , а картинка - это визуальное представление символа, которое содержится в файле шрифта в соответствующей коду символа ячейке.
Другими словами, кодировка (англ. charset ) - это набор взаимосвязей кодов символов с их визуальными представлениями в шрифте.
HTML-страница представляет собой обычный текстовый файл, кодировка которого выбирается при его создании и/или сохранении на запоминающее устройство (жёсткий диск, флэшка и т.д.) .
В случае с Notepad++, кодировка нового документа задаётся в настройках текстового редактора. Выбираем в меню: Опции > Настройки… - и переходим на вкладку «Новый документ ». Здесь нас интересует секция «Кодировка ». По умолчанию, выбрана кодировка ANSI .
Напомню, что это кодировка, в которой будет храниться HTML-файл.
Впрочем, Вы всегда можете преобразовать кодировку HTML-страницы, используя соответствующие функции текстового редактора. Например, в Notepad++ для этого кликните пункт меню «Кодировки » и выберите нужное преобразование.
В данном случае файл был в кодировке ANSI и я преобразовал его в UTF-8 (без BOM) . О том, что такое этот BOM Вы можете прочитать в моей статье: PHP: как удалить BOM в WordPress - проследовав по .
Важно разделять кодировку файла и кодировку отображения . Независимо от того, в какой кодировке хранится файл, он может быть отображен и в любой другой кодировке. Это и является одной из причин проблем с кодировкой.
Например, если Вы сохранили HTML-страницу в кодировке ANSI и откроете её в браузере, вместо русских символов Вы можем получить, так называемые, «кракозябрики».
В данном случае нам надо убедиться, что кодировка файла совпадает с кодировкой отображения файла в браузере. Для этого в Firefox кликните иконку меню, а потом пункт «Кодировка ». Если такого у Вас нет, кликните пункт «Изменить » и добавьте элемент «Кодировка » в меню.
Как вы видите, браузер отображает файл в кодировке «Юникод » (например, UTF-8 ) , в то время как файл был сохранён в кодировке ANSI (например, Windows-1251 ) . Выбрав нужную кодировку, мы получим нужный нам результат.
В случае с Notepad++ также имеется возможность выбора кодировки отображения. Для этого кликните пункт меню «Кодировки », а потом нужный вариант используемой для отображения кодировки.
В данном случае я изменил кодировку отображения ANSI на UTF-8 (без BOM) .
И так, мы уже разобрались с тем, что такое кодировка и в чём состоит отличие кодировки файла и кодировки отображения. Теперь нам нужно решить проблему с кодировкой, которая заключается в неправильной интерпретации браузером (или любым другим клиентом) кодировки HTML-страницы.
Почему возникают проблемы с кодировкой? Определить кодировку HTML-страницы не просто, а зачастую и не возможно, т.к. у того же браузера нет информации о ней или она указана неправильно.
Для того чтобы указать кодировку HTML-страницы используется специальный метатег. В HTML5 он имеет следующий урезанный вид:
В данном случае указана кодировка UTF-8 (Юникод) .
В более старых версиях HTML этот метатег имеет следующий вид:
Этот метатег создаёт HTTP-заголовок Content-Type , в котором указывается тип документа text/html и его кодировка Windows-1251 (ANSI) .
Лично я рекомендую использовать именно этот вариант, т.к. с ним будет меньше всего проблем. Главное чтобы такой метатег присутствовал в секции HEAD , и указанная в нём кодировка соответствовала кодировке файла. В большинстве случаев этого будет достаточно.
В некоторых случаях указать метатег с кодировкой HTML-страницы будет недостаточно. Такая проблема может быть вызвана настройками самого сервера, на котором находится файл HTML-страницы. Дело в том, что сервер способен выдавать свой HTTP-заголовок Content-Type , который будет, условно говоря, иметь приоритет перед метатегом.
В данном случае эту проблему можно решить путём внесения изменений в настройки сервера. Я не буду вдаваться в детали данного вопроса и порекомендую лишь отключать всю эту перекодировку через файл .htaccess , например:
CharsetDisable Off
Также можно производить изменения HTTP-заголовка Content-Type и программными средствами. В том же PHP для этого используется функция header() , например:
header("Content-Type: text/html; charset=UTF-8");
Обращаю Ваше внимание на то, что указание HTTP-заголовков должно идти до вывода какой-то информации на экран, в противном случае Вы получите сообщение об ошибке.
(Short Message Peer to Peer - короткое сообщение равноправных узлов) – открытый протокол, который используется для отправки/получения смс-сообщений между равноправными субъектами. Данный протокол используется, как и HTTP, поверх TCP/IP, но является бинарным. Как правило, SMPP протокол обеспечивает режим постоянного подключения, без совершения запросов и ожидания ответов от сервера с дальнейшим разрывом соединения. Использование постоянного подключения увеличивает в разы скорость отправки сообщений.
SMS провайдеры могут ограничить скорость, с которой они будут принимать сообщения в целях оптимизации и распределения их ресурсов. Если вы пытаетесь отправить с большей скоростью, чем позволяет ваш провайдер, вы можете столкнуться с неожиданными ошибками и задержками.
SMPP способен передавать любой тип сообщения, включая такие как UCP/EMI. SMPP поддерживает как длинные текстовые сообщения, так и сообщения, написанные в Unicode. Некоторые SMPP-сервера требуют от отправителя цельное длинное сообщение, а другие - чтобы выполнялось сегментирование сообщения, основанное на типе сообщения.
Существуют три различных типа соединений, которые могут быть поддержаны SMPP сервером.
Тип подключения, который вы используете, будет зависеть от предпочтений и политики ваших SMPP услуг.
Протокол SMPP является расширяемым, что позволяет провайдерам добавлять свои собственные дополнительные параметры, которые известны как TLV параметры, названные так из-за формата этих параметров: тег (метка), длина, стоимость. Некоторые TLV параметры, определены в спецификации, но не являются обязательными в использовании. Другие параметры предоставляются провайдером.
Возможно использование сервиса SMS, как SMPP сервер для других приложений. Другие клиенты или приложения подключаются к SMS-сервису и их SMPP серверу, и SMS-сервис связывается с одним или несколькими другими SMS-центрами для отправки и получения SMS-сообщений, с использованием SMPP, или, возможно других протоколов.
Передача сообщений между SMS-сервером и SMS Центром провайдера GSM службы по IP связи может быть через выделенную линию (шлюз) через Интернет. При этом IP-соединение между ПК и SMS Центром может быть защищено.
Преимущество SMPP протокола состоит в том, что процесс происходит намного быстрее и с меньшим интервалом (от одной до десяти секунд), чем при использовании мобильного телефона. SMPP рекомендуется применять, если максимальное количество отправляемых сообщений более чем 100 смс/час. Также, SMPP-сервис позволяет вписывать любую информацию (11 знаков) в строку номера отправителя. Поддерживаются цифры, символы латинского алфавита, знаки препинания пробел. Введенная информация будет фигурировать у получателя в строке «Сообщение от:» и может быть самостоятельно сменена отправителем. Таким образом, у вас есть возможность использовать свой SMS-центр, работающий по протоколу SMPP.
SMPP (аббревиатура: Short message peer-to-peer protocol) в переводе с английского означает «Короткое сообщение равноправных узлов» и позволяет описать взаимодействие между SMS сервером и конечным клиентом. Данный протокол относится к числу наиболее популярных у SMS-провайдеров, использующих его для обмена текстовыми сообщениями между СМС центрами с равными правами. Для работы с SMPP протоколом необходимо наличие постоянно включенного сервера и соответствующего ПО, совместимого с SMS-шлюзом провайдера.
Протокол незаменим для регулярной отправки большого объема сообщений по надежному и высокоскоростному каналу. Поэтому SMS провайдер обычно использует данный протокол для обмена SMS и USSD сообщениями в системах VAS, для подключения различных внешних систем и т.д. Узнать подробнее о протоколе SMPP и о том, как существляется рассылка, Вы сможете, обратившись к нашим специалистам.
Расшифровку ошибок можно найти в спецификации SMPP 3.4.
Внимание: Вам необходимо прислать список IP адресов, с которых Вы будете
подключаться, перед тем как начать использовать SMPP.
Параметры подключения с использованием SMPP
Поддерживаемые команды по протоколу SMPP
На неподдерживаемые команды будут приходить GENERIC_NAK сообщения с кодом ошибки ESME_RINVCMDID.
Параметры отправки сообщения (SUBMIT_SM) по протоколу smpp
Правила работы с SMPP подключением
При установке подключения клиенту дается 10 секунд, что бы отправить команду BIND_TRANSMITTER или BIND_TRANSCEIVER, в противном случае соединение будет разорвано.
Клиент обязан отвечать на все пакеты, полученные через шлюз соответствующим resp пакетом в течение 1 минуты, иначе соединение будет разорвано без отсылки UNBIND.
Получение статуса доставки сообщения
Есть две возможности получения статуса доставки по протоколу smpp (активный и пассивный). Пассивный вариант является предпочтительным.
Пассивный вариант предусматривает установку флага registered_delivery пакета SUBMIT_SM.
После перехода сообщения в финальное состояние сервер отправит DELIVER_SM пакет с Delivery
Receipt сообщением. Формат Delivery Receipt сообщения ниже.
Активный вариант предусматривает периодический опрос статуса сообщения отсылкой
QUERY_SM.
Формат Delivery Receipt
"id:IIIIIIIIII sub:SSS dlvrd:DDD submit date:YYMMDDhhmm done date:YYMMDDhhmm
stat:DDDDDDD err:E Text: . . . . . . . . ."
Зарезервированные коды ошибок при smpp соединении
Код | Описание |
0x0400 (1024) |
Кодировка не распознана |
0x0401 (1025) |
Слишком большой текст сообщения. Максимальная длина не должна превышать 160 |
байт. 0x0402 (1026) |
Ошибка регистрации сообщения на отправку. При возникновении этой ошибки обратитесь в службу поддержки. |
0x0403 (1027) |
Не прошла проверка текста сообщения на наличие недопустимых слов и/или фраз |
0x0404 (1028) |
Отправитель или получатель в черном списке |
0x0453 (1107) |
Сработало ограничение по отправке одинакового текста на один и тот же номер в течение небольшого промежутка времени. Обратитесь в поддержку, если хотите отключить или уменьшить период. |
0x043C (1084) |
Нет доступного тарифа для запрашиваемого направления. |
0x043F (1087) |
Нет подходящего тарифа у вышестоящего контрагента. |
0x045A (1114) |
Политика маршрутизации не найдена. |
0x0446 (1094) |
Ошибка транспорта. При возникновении этой ошибки обратитесь в службу поддержки. |
0x433 (1075) |
Недостаточно средств на счете. |
Отправка СМС через smpp, smpp-шлюз
Одним из протоколов отправки SMS-сообщений является SMPP. Он описывает процесс взаимодействия получателя сообщения, то есть smpp-клиента с smpp-сервером, используя при этом особую систему передачи данных.
Взяв за основу отправку CMC-сообщений через протокол SMPP, Вы получите возможность:
Таким образом, протокол smpp обладает большими возможностями, которые, однако, сопряжены и с некоторыми особенностями использования и установки, которые мы и рассмотрим.
ТРЕБУЕТСЯ КАЧЕСТВЕННЫЙ SMPP-ШЛЮЗ? Свяжитесь с нами и мы предоставим тестовый доступ!
Особенности работы с SMPP
Для работы с протоколом SMPP необходимо иметь соответствующее ПО (SMPP-клиент, версии 3.4). При этом оборудование должно быть постоянно подсоединено к шлюзу компании "СМС-Агент". Для того чтобы отправка SMS через SMPP осуществлялась быстро и без задержек, все клиенты нашей фирмы проходят тест на совместимость оборудования. Это позволяет избавиться от многих технических сложностей еще на начальном этапе.
Кроме того, перед использованием протокола для проведения SMS-рассылок, пользователи могут провести тестовую отсылку СМС сообщений через SMPP, чтобы определиться с желаемой скоростью доставки.
Специалисты компании "СМС-Агент" всегда готовы предоставить консультацию по вопросам использования, подключения и тестирования сервиса SMPP, что упростит Вашу задачу.
Подключение по SMPP протоколу
System_id - зарегистрированное в системе имя пользователя
password - пароль пользователя
Адрес - smpp.сайт
Порт - 2775
Для шифрованного SSL-подключения используется порт 3443
Поддерживаемые команды по протоколу SMPP
Параметры отправки сообщения (SUBMIT_SM) по SMPP
Правила работы с SMPP подключением
При установке подключения клиенту дается 10 секунд, что бы отправить команду BIND_TRANSMITTER или BIND_TRANSCEIVER. Иначе соединение будет разорвано сервером.
Клиент обязан отвечать на все пакеты отправленные сервером соответствующим resp пакетом в течение 1 минуты. Иначе соединение будет разорвано сервером без отсылки UNBIND.
Получение статуса доставки сообщения
Есть две возможности получения статуса доставки по протоколу smpp (активный и пассивный). Пассивный вариант является предпочтительным.
Пассивный вариант предусматривает установку флага registered_delivery пакета SUBMIT_SM.
После перехода сообщения в финальное состояние сервер отправит DELIVER_SM пакет с Delivery Receipt сообщением.
Формат Delivery Receipt сообщения ниже.
Активный вариант предусматривает периодический опрос статуса сообщения отсылкой QUERY_SM.
Формат Delivery Receipt
"id:IIIIIIIIII sub:SSS dlvrd:DDD submit date:YYMMDDhhmm done date:YYMMDDhhmm stat:DDDDDDD err:E Text: . . . . . . . . ."
Зарезервированные коды ошибок при smpp соединении
Код | Описание |
0x0400 (1024) | Кодировка не распознана |
0x0401 (1025) | Слишком большой текст сообщения. Максимальная длина не должна превышать 160 байт |
0x0402 (1026) | Ошибка регистрации сообщения. При возникновении этой ошибки обратитесь в службу поддержки |
0x0403 (1027) | Не прошла проверка текста сообщения на наличие недопустимых слов и/или фраз |
0x0404 (1028) | Отправитель или получатель в черном списке |
0x0453 (1107) | Сработало ограничение по отправке одинакового текста на один и тот же номер |
0x043C (1084) | Нет доступного тарифа для запрашиваемого направления |
0x043F (1087) | Нет подходящего тарифа у вышестоящего контрагента |
0x045A (1114) | Политика маршрутизации не найдена |
0x0446 (1094) | Ошибка транспорта. При возникновении этой ошибки обратитесь в службу поддержки |
0x0433 (1075) | Недостаточно средств на счете |
Протокол обмена определяется спецификацией SMPP версии 3.4.
Версия 1.0 предназначена только для отправки сообщений и получения статуса доставки.
Прием сообщений в данный момент не поддерживается.
Расшифровку ошибок можно найти в спецификации SMPP версии 3.4.
Для повышения уровня безопасности при работе с системой, вы можете предоставить список IP адресов с которых будет осуществляться подключение.
На неподдерживаемые команды сервер будет отвечать GENERIC_NAK сообщением с кодом ошибки ESME_RINVCMDID.
При установке подключения клиенту дается 10 секунд, что бы отправить команду BIND_TRANSMITTER или BIND_TRANSCEIVER. Иначе соединение будет разорвано сервером.
Клиент обязан отвечать на все пакеты отправленные сервером соответствующим resp пакетом в течение 1 минуты. Иначе соединение будет разорвано сервером без отсылки UNBIND.
Есть две возможности получения статуса доставки (активный и пассивный). Пассивный вариант является предпочтительным.
Пассивный вариант предусматривает установки флага registered_delivery пакета SUBMIT_SM. После перехода сообщения в финальное состояние сервер отправит DELIVER_SM пакет с Delivery Receipt сообщением. Формат Delivery Receipt сообщения ниже.
Активный вариант предусматривает периодический опрос статуса сообщения отсылкой QUERY_SM.