Комплект PHP-функций для работы с UTF-8.

03 Июн 2008

PHP UTF-8Вдогонку к заметкам о морфологическом антимат-фильтре на PHP, функциях для экстренного конвертирования в UTF и обратно и функции для защиты от XSS-атак, публикую потрясающую по полезности находку.

Это полнейший must have для PHP-программистов — если даже и не включать это в готовый код, то для отладки — бесценно. Я уже не знаю, что бы я делал без функции is_utf8, например. Поэтому качаем архив, распаковываем его себе и пользуемся, изучив и сохранив описание.

Этот сборник продвинутых функций для работы с UTF-8 текстом создан коллективным разумом форума программистов и усилиями Рината Мухтарова. Скачать архив.

Далее — список доступных функций и их описания:

1. censure. Функция определяет наличие мата (нецензурных, матерных слов) в тексте. Возвращает false, если мат не обнаружен, иначе обнаруженное матерное слово. Алгоритм достаточно надежен и быстр, в т.ч. на больших объемах данных. Метод обнаружения мата основывается на корнях и предлогах русского языка, а не на словаре, поэтому скорость очень высока.

2. cp1251_to_utf8_recursive. Функция для перекодировки данных произвольной структуры из кодировки cp1251 в кодировку UTF8.

3. cp1259_to_utf8. Конвертирует текст из кодировки cp1259 и cp1251 в кодировку UTF-8.

4. html_template. HTML-ориентированный шаблонизатор с автоматическим квотированим значений меток-заменителей.

5. html_words_highlight. «Подсветка» найденных слов для результатов поисковых систем.

6. hyphen_words. Расстановка «мягких» переносов в словах.

7. is_utf8. Возвращает true усли переданная строка — правильный UTF-8, иначе false.

8. php2js. Конвертирует данные PHP из scalar, array и hash в данные JS в scalar/array/hash.

9. strip_tags_smart. Более продвинутый аналог strip_tags() для корректного вырезания тегов из html кода. Возможности:

— корректно обрабатываются вхождения типа «a < b > c».
— корректно обрабатывается «грязный» html, когда в значениях атрибутов тагов могут встречаться символы < >.
— корректно обрабатывается разбитый html.
— вырезаются комментарии, скрипты, стили, PHP, Perl, ASP код, MS Word теги.
— автоматически форматируется текст, если он содержит html код.
— защита от подделок типа: «<script>alert(‘hi’)script>».

10. textarea_rows. Вычисляет высоту области редактирования текста (<textarea>) по значению и ширине.

11. ucs2_to_utf8. Преобразует строку из кодировки UCS-2 в UTF-8, без использования iconv.

12. utf8_autoconvert_request_charset. Перекодирует значения элементов массивов $_GET, $_POST, $_COOKIE, $_REQUEST, $_FILES из кодировки cp1251 в UTF-8, если необходимо. Побочным положительным эффектом функции является защита от XSS атаки с непечатаемыми символами на уязвимые PHP функции.

13. utf8_check. Пытается определить, находится ли строка в кдировке Unicode.

14. utf8_convert_case. Конвертирует регистр букв в строке в кодировке UTF-8.

15. utf8_escape. Перекодирует строковые объекты так, чтобы они читались везде.

16. utf8_html_entity_decode. Конвертирует все HTML-entities в символы UTF-8.

17. utf8_html_entity_encode. Конвертирует спецсимволы UTF-8 в HTML-entities.

18. utf8_simple_search_sql. Создает условия для простого поискового SQL запроса, основанного на LIKE и REGEXP.

19. utf8_str_limit. Обрезает текст в кодировке UTF-8 до заданной длины, причём последнее слово показывается целиком, а не обрывается на середине.

20. utf8_strlen. Расширенная функция strlen() для работы со строками в utf-8.

21. utf8_substr. Расширенная функция substr() для работы со строками в utf-8.

22. utf8_ucfirst. Преобразует первый символ строки в кодировке UTF-8 в верхний регистр.

23. utf8_ucwords. Преобразует в верхний регистр первый символ каждого слова в строке в кодировке UTF-8, остальные символы каждого слова преобразуются в нижний регистр.

24. utf8_unescape. Функция декодирует строку в формате %uxxxx в строку формата UTF-8.

25. utf8_unescape_recursive. Рекурсивный вариант utf8_unescape().

26. utf8_unescape_request. Корректирует глобальные массивы $_GET, $_POST, $_COOKIE, $_REQUEST, декодируя значения в юникоде, закодированные через функцию javascript escape() ~ “%uxxxx”.

Жилинский Владимир.






 

Лёхха     .

Написано 3 июня 2008 года в 16:40


Ммм, попробуем интегрировать в проект. На самом деле, is_utf8 давно «хотелась» :)

 

Vadimych     .

Написано 3 июня 2008 года в 18:37


Ух ты, пользительная штука.
Спасибо!

Еще бы недельки на полторы пораньше, я бы тогда чуть меньше мата бы исторг из себя :)

 

Жилинcкий Владимир     .

Написано 3 июня 2008 года в 18:40


Угу. Мне тоже нравится — всё это работает. Уже чем-то даже на фреймворк похоже ))
В «Коллеги» понемногу внедряю, уже отучил их матом ругаться… =)

 

Олег Шлыков     .

Написано 3 июня 2008 года в 18:46


Просто супер, спасибо! Шикарная подборка, есть почти все что нужно в жизни. У меня часть сайтов — сборная солянка из кусочков разных проектов, и встречаются все три кодировки, так что как раз то что нужно. За скрипт антимата особое спасибо — как раз собирался прикручивать к комментариям, а тут даже ничего изобретать не нужно.

 

Тормоз     .

Написано 3 июня 2008 года в 21:15


А можно подробнее, чем это всё лучше и правильнее, нежели mb_string?

 

Жилинcкий Владимир     .

Написано 3 июня 2008 года в 21:16


Возьми строчку в UTF-8 w\o BOM с русскими буквами и сделай mb_string. Удивлён будешь весьма, увидев цифру, которая не совпадёт с числом букв :-)

 

Тормоз     .

Написано 3 июня 2008 года в 21:19


В моих скриптах нет BOM с тех пор, как я про него узнал :)

 

Жилинcкий Владимир     .

Написано 3 июня 2008 года в 21:22


w\o = without = без :-)

 

bublik     .

Написано 4 июня 2008 года в 04:10


Ёма народ! Добавил в закладки.

 

DeadLy     .

Написано 4 июня 2008 года в 10:13


Давно уже пользуюсь этим паком. Спасибо Rin’у

 

kikaha     .

Написано 4 июня 2008 года в 17:30


Ах, какое полезное изобретение, дайте же я вас немедленно расцелую! Нет, кроме шуток — просто праздник души, сейчас 3 проекта в работе, все принципиально на UTF, и там-сям всплывают проблемки, большую часть которых навскидку этот набор решает. Еще раз позвольте выразить респект и искреннее почтение!

 

aboutubuntu     .

Написано 5 июня 2008 года в 03:21


Владимир, привык от вас регулярно получать всякие удивительно полезные сниппеты :) Но читаю вас не сильно давно. Подскажите, нет ли у вас чего-то готового для типовых случаев валидации форм (e-mail, номер телефона и пр.)?

Простите, если проявляю ленность и наглость :)

 

aboutubuntu     .

Написано 5 июня 2008 года в 03:22


И по теме: мне очень хочется, чтобы поскорее умерло всё, кроме юникода — было бы одной головной болью меньше. Но, думаю, пока того не возжелает Майкрософт — ничего подобного не случится.

 

Ivan     .

Написано 6 июня 2008 года в 16:31


Зачетный пак, спасибо!

 

Андрей     .

Написано 8 июня 2008 года в 19:45


все тебе благодарны!спасибо

 

Глупый SEO     .

Написано 9 июня 2008 года в 11:55


Эту подборку качал с форума _http://dklab.ru/
Однако, в некоторых случаях, при использовании функции cp1251_to_utf8_recursive отмечал баги. Даже не могу понять, с чем это связано.

 

dsultan     .

Написано 20 июня 2008 года в 12:29


пытаюсь передать курлом пост запрос от браузера, после
foreach($_POST as $k => $v){
$postfields.= «$k=».utf8_encode($v).»&»;
}
curl_setopt($ch, CURLOPT_POSTFIELDS, substr($postfields,0,-1));

экранируются кавычки
смотрю сниффером, один из value был — {«ActiveTabIndex»:1,»TabState»:[true,true]}
а стал
{\»ActiveTabIndex\»:1,\»TabState\»:[true,true]}

кто нибудь может мне помочь?

 

aky     .

Написано 11 апреля 2011 года в 02:50


Самый простой is_utf8 для str

$is_utf8=preg_match('//u', $str);

 

Rin-Nas     .

Написано 3 июня 2011 года в 23:37

 

Иван     .

Написано 16 августа 2011 года в 09:25


Ошибка Parse error: syntax error, unexpected T_FUNCTION in C:\server\core\UTF8.php on line 2848

При выполнении строки
If (UTF8::strlen($f[‘comment’])>20) $com = UTF8::SubStr($f[‘comment’],0,20);

Оставить комментарий:

You must be logged in to post a comment.

© 2007-2010 Блог интернет-разработчика, автор — Zhilinsky.ru.
При использовании информации ссылка на источник обязательна.