PHP. Как правильно вырезать часть строки с кириллицей?

Written by
  • 3 года ago

Первое, на что натыкаются начинающие программисты – PHP функция substr. Она действительно используется для обрезки строк и синтаксис ее несложен substr(string, int start [, int length] ), где int start – начальный символ с которого нужно начать резать строку, а необязательный параметр int length – количество символов, которые нужно отрезать. Однако, для неопытного программиста она может показаться странной, если он пытается использовать ее для PHP обрезки строки с кириллицей. В результате работы substr с кириллической строкой на конце обрезанной строки может появиться знак вопроса, или знак вопроса в ромбике, а общее число вырезанных символов почему-то в два раза меньше того, что было задано в параметре int length. Почему же так происходит?

Дело в том русскоязычные символы в UTF-8 имеют размер в 2 байта, а латинские символы всего 1 байт. PHP функция substr режет строку именно по байтам, а не по символам. Если строка состоит из латинских символов, то ничего странного не происходит, так как число символов совпадает с числом байтов. А при работе с кириллицей, где каждый символ занимает 2 байта, параметр int length запросто может попасть на «середину» символа, и в результате на конце вырезанной строки при выводе мы увидим тот злополучный знак вопроса в ромбике.

Как правильно вырезать часть строки с кириллицей?

Решение этой проблемы на самом деле очень простое. Для правильной PHP обрезки строки, содержащей кириллические символы нужно использовать PHP функцию iconv_substr

Синтаксис функции несложный:

iconv_substr ( string, int start [, int length [, charset]] )

Пример для обрезки русскоязычной строки до 80 символов с UTF-8 кодировкой с помощью iconv_substr:

$new_string = iconv_substr ($string, 0 , 80 , “UTF-8” );

Цифра ноль в примере означает что отсчет 80 символов начинается с самого начала строки.

Article Categories:
PHP

Leave a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Menu Title