HTML Diff
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>