0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>PHP долгое время не работал с многобайтовыми кодировками, такими как UTF-8.</p>
1
<p>PHP долгое время не работал с многобайтовыми кодировками, такими как UTF-8.</p>
2
<p>Даже если попробовать выполнить любую операцию над строкой, включающей не ASCII-символы, станет видно, что функции по-прежнему не умеют обрабатывать такие строки. Дело в том, что в целях соблюдения обратной совместимости, в PHP было создано отдельное подмножество функций, имеющих аналогичные названия, но с префиксом mb_.</p>
2
<p>Даже если попробовать выполнить любую операцию над строкой, включающей не ASCII-символы, станет видно, что функции по-прежнему не умеют обрабатывать такие строки. Дело в том, что в целях соблюдения обратной совместимости, в PHP было создано отдельное подмножество функций, имеющих аналогичные названия, но с префиксом mb_.</p>
3
<p>Такая ситуация очень неприятна и из популярных языков присутствует в PHP, C++ и C. В большинстве остальных языков есть ровно один набор функций, работающий со всеми кодировками. Минимизировать проблему можно использованием только функций с префиксом mb_, так как они прекрасно работают и для английского алфавита, и вообще для любых строк.</p>
3
<p>Такая ситуация очень неприятна и из популярных языков присутствует в PHP, C++ и C. В большинстве остальных языков есть ровно один набор функций, работающий со всеми кодировками. Минимизировать проблему можно использованием только функций с префиксом mb_, так как они прекрасно работают и для английского алфавита, и вообще для любых строк.</p>
4
<p>Вторая проблема, уже типичная - функций довольно много и некоторые из них низкоуровневые. Например, проверить то, что строка начинается с определённой подстроки можно с помощью функции strpos().</p>
4
<p>Вторая проблема, уже типичная - функций довольно много и некоторые из них низкоуровневые. Например, проверить то, что строка начинается с определённой подстроки можно с помощью функции strpos().</p>
5
<p>Такой код, мало того, что сложен (не очевидно, что он делает), так ещё и является постоянным источником ошибок из-за неявного приведения типов. Поэтому в PHP появилась функция str_starts_with():</p>
5
<p>Такой код, мало того, что сложен (не очевидно, что он делает), так ещё и является постоянным источником ошибок из-за неявного приведения типов. Поэтому в PHP появилась функция str_starts_with():</p>
6
<h2>Symfony String</h2>
6
<h2>Symfony String</h2>
7
<p>Библиотека Symfony String предоставляет унифицированный объектно-ориентированный интерфейс для работы со строчками. Она работает как типичный Builder, например, Collect.</p>
7
<p>Библиотека Symfony String предоставляет унифицированный объектно-ориентированный интерфейс для работы со строчками. Она работает как типичный Builder, например, Collect.</p>
8
<p>Применение методов к обёрнутой строке всегда возвращает обёрнутую строку. Такое поведение добавляет возможность строить цепочки.</p>
8
<p>Применение методов к обёрнутой строке всегда возвращает обёрнутую строку. Такое поведение добавляет возможность строить цепочки.</p>
9
<p>Кроме того, объект, возвращаемый функцией s(), реализует магический метод __toString(), а это значит, что не придётся заниматься преобразованием типов, как в случае с Collect. Каждый раз, когда объект используется как строка, на его месте оказывается строка.</p>
9
<p>Кроме того, объект, возвращаемый функцией s(), реализует магический метод __toString(), а это значит, что не придётся заниматься преобразованием типов, как в случае с Collect. Каждый раз, когда объект используется как строка, на его месте оказывается строка.</p>
10
<p>Библиотека Symfony String содержит инструменты, которые пришлось бы самостоятельно писать для решения типовых задач. Рассмотрим преобразование названия курса в латинский вариант, чтобы использовать его в урле. Слаг (Slug) - это строка, которая выводится в адресе страницы. Как правило это латинские символы, которые могут быть разделены через тире. Например, в адресе https://ru.hexlet.io/blog/posts/sovershennyy-kod-biblioteka-ili-svoe-reshenie часть<em>sovershennyy-kod-biblioteka-ili-svoe-reshenie</em>будет слагом статьи.</p>
10
<p>Библиотека Symfony String содержит инструменты, которые пришлось бы самостоятельно писать для решения типовых задач. Рассмотрим преобразование названия курса в латинский вариант, чтобы использовать его в урле. Слаг (Slug) - это строка, которая выводится в адресе страницы. Как правило это латинские символы, которые могут быть разделены через тире. Например, в адресе https://ru.hexlet.io/blog/posts/sovershennyy-kod-biblioteka-ili-svoe-reshenie часть<em>sovershennyy-kod-biblioteka-ili-svoe-reshenie</em>будет слагом статьи.</p>
11
<p>В библиотеке Symfony String есть специальный класс, который позволяет создавать слаги:</p>
11
<p>В библиотеке Symfony String есть специальный класс, который позволяет создавать слаги:</p>
12
<p>Класс AsciiSlugger возьмет на себя способ преобразования кириллицы в латиницу. Метод slug() вернет экземпляр класса Symfony\Component\String\UnicodeString, который содержит методы, необходимые для работы со строкой.</p>
12
<p>Класс AsciiSlugger возьмет на себя способ преобразования кириллицы в латиницу. Метод slug() вернет экземпляр класса Symfony\Component\String\UnicodeString, который содержит методы, необходимые для работы со строкой.</p>