Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

UTF8: PHP класс для обработки текста в кодировке UTF-8 (Rin)
Goto page 1, 2, 3  Next
Author Message
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Sun Aug 14, 2005 10:11 pm (написано за 1 час 27 минут 4 секунды)
   Post subject: UTF8: PHP класс для обработки текста в кодировке UTF-8
Reply with quote

PHP5 UTF-8 is a UTF-8 aware library of functions mirroring PHP's own string functions.

The powerful solution/contribution for UTF-8 support in your framework/CMS, written on PHP.
This package is advance of sourceforge.net/projects/phputf8 (last updated in 2007).

Project has been moved to code.google.com/p/php5-utf8/

In Russian:

Поддержка UTF-8 в PHP 5.

Преимущества использования этого класса:
  1. Совместимость с интерфейсом стандартных PHP функций, работающих с однобайтовыми кодировками
  2. Возможность работы без PHP расширений ICONV и MBSTRING, если они есть, то активно используются! Используется наиболее быстрый из доступных методов между MBSTRING, ICONV, родной реализацией на PHP и хаками.
  3. Полезные функции, отсутствующие в ICONV и MBSTRING
  4. Методы, которые принимают и возвращают строку, умеют принимать и возвращать null. Это удобно при выборках значений из базы данных.
  5. Несколько методов умеют обрабатывать массивы рекурсивно: convert_from(), convert_to(), strict(), is_utf8(), blocks_check(), convert_case(), lowercase(), uppercase(), unescape()
  6. Проверка у методов входных параметров на допустимые типы через рефлексию (можно отключить)
  7. Единый интерфейс и инкапсуляция, можно унаследоваться и переопределить методы
  8. Покрытие тестами
  9. PHP >= 5.3.x
.
Обзор (code.google.com/p/php5-utf8/wiki/Overview)

Example:
Code (php): скопировать код в буфер обмена
  $s = 'Hello, Привет';
  if (UTF8::is_utf8($s)) echo (www.php.net/echo) UTF8::strlen (www.php.net/strlen)($s);


Last edited by Rin on Wed Oct 12, 2011 5:01 pm; edited 86 times in total
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Fri Jun 15, 2007 12:05 pm (спустя 1 год 10 месяцев 13 часов 53 минуты; написано за 59 секунд)
   Post subject:
Reply with quote

Все функции для работы с UTF-8 собраны в один архив.

Last edited by Rin on Mon Aug 03, 2009 10:14 am; edited 1 time in total
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Mon Jul 16, 2007 2:05 pm (спустя 1 месяц 1 день 1 час 59 минут; написано за 25 секунд)
   Post subject:
Reply with quote

Обновление от 2007-07-16.
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Sat Sep 08, 2007 12:52 pm (спустя 1 месяц 22 дня 22 часа 46 минут; написано за 9 секунд)
   Post subject:
Reply with quote

Обновление от 2007-09-08.
Back to top
View user's profile Send private message Send e-mail
iceman
Guest





Карма: 386
   поощрить/наказать


PostPosted: Thu Oct 11, 2007 8:12 pm (спустя 1 месяц 3 дня 7 часов 20 минут; написано за 28 секунд)
   Post subject:
Reply with quote

в архиве чето нету файла php2js.php

а в списке указан..
Back to top
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Fri Oct 12, 2007 11:06 am (спустя 14 часов 53 минуты; написано за 18 секунд)
   Post subject:
Reply with quote

Обновление от 2007-10-12. (+ php2js.php)
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Sat Oct 20, 2007 4:13 pm (спустя 8 дней 5 часов 7 минут; написано за 17 секунд)
   Post subject:
Reply with quote

Обновление от 2007-10-20. (+ hyphen_words.php)
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Mon Oct 22, 2007 5:10 pm (спустя 2 дня 56 минут; написано за 19 секунд)
   Post subject:
Reply with quote

Обновление от 2007-10-22. (+ utf8_autoconvert_request_charset.php)
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Mon Nov 12, 2007 12:01 pm (спустя 20 дней 18 часов 50 минут; написано за 2 минуты 45 секунд)
   Post subject:
Reply with quote

Обновление от 2007-11-12.
  1. html_template() -- Если имя метки-заменителя начинается с _SERVER или _REQUEST, то применяется htmlspecialchars($string); добавлены методы .intval() и .floatval()
  2. utf8_str_limit() -- Если текст содержит HTML код, теперь он НЕ вырезается автоматически
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 386
   поощрить/наказать


PostPosted: Mon Nov 19, 2007 6:51 am (спустя 6 дней 18 часов 49 минут; написано за 23 секунды)
   Post subject:
Reply with quote

Огромное спасибо! Реально нужные вещи....
Back to top
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Mon Nov 19, 2007 10:17 am (спустя 3 часа 26 минут; написано за 1 минуту 4 секунды)
   Post subject:
Reply with quote

Обновление от 2007-11-19.
  1. utf8_autoconvert_request_charset() -- добавлена перекодировка массива $_FILES.
    Кстати, побочным положительным эффектом функции является защита от XSS атаки с непечатаемыми символами на уязвимые PHP функции.
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 386
   поощрить/наказать


PostPosted: Fri Dec 14, 2007 9:55 am (спустя 24 дня 23 часа 38 минут; написано за 1 минуту)
   Post subject:
Reply with quote

Ну ребята....
Да у вас тут кладезь мудростей прям!!!!
Огромное спасибо!!!
Главное идея ;)
Back to top
Guest






Карма: 386
   поощрить/наказать


PostPosted: Tue Jan 08, 2008 10:19 am (спустя 25 дней 23 минуты; написано за 16 секунд)
   Post subject:
Reply with quote

Большое спасибо!
Back to top
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Thu Feb 21, 2008 5:03 pm (спустя 1 месяц 13 дней 6 часов 43 минуты; написано за 7 минут 47 секунд)
   Post subject:
Reply with quote

Обновление от 2008-02-21.
Из того, что вспомнил:
  1. censure() -- новая версия антиматного фильтра (forum.dklab.ru/viewtopic.php?p=136749)
  2. cp1251_to_utf8_recursive() -- новая функция
  3. html_template() -- теперь пустые таги автоматически не вырезаются
  4. hyphen_words() -- добавлена обработка слов со знаком ударения
  5. is_utf8() -- добавлен второй параметр $is_strict (строгая проверка диапазона ASCII?)
  6. strip_tags_smart() (forum.dklab.ru/viewtopic.php?t=19849) -- корректная обработка внутри тагов <pre></pre>
  7. utf8_autoconvert_request_charset() -- добавлен параметр $is_hex2bin (Декодировать HEX-данные типа 0xd09ec2a0d0bad0be?)
  8. utf8_check() -- добавлен второй параметр $is_strict (строгая проверка диапазона ASCII?)
  9. utf8_strlen() -- оптимизация


Last edited by Rin on Fri Feb 22, 2008 4:02 pm; edited 3 times in total
Back to top
View user's profile Send private message Send e-mail
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Thu Feb 21, 2008 9:50 pm (спустя 4 часа 47 минут; написано за 18 секунд)
   Post subject:
Reply with quote

Rin
Мм, а можно более информативный комментарий?
Back to top
View user's profile Send private message
eternalko
Участник форума



Joined: 06 Jan 2008
Posts: 34
Карма: 0
   поощрить/наказать


PostPosted: Wed Mar 26, 2008 4:23 pm (спустя 1 месяц 4 дня 18 часов 33 минуты; написано за 25 секунд)
   Post subject:
Reply with quote

Супер!
Только бы комментарии поинформативней (:
Back to top
View user's profile Send private message
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Fri Apr 25, 2008 1:14 pm (спустя 29 дней 20 часов 51 минуту; написано за 1 минуту 45 секунд)
   Post subject:
Reply with quote

Обновление от 2008-04-25
  1. html_words_highlight() исправлена ошибка, добавлена оптимизация
  2. utf8_convert_case() исправлена ошибка
  3. php2js() символ квотирования по умолчанию -- двойная кавычка вместо одинарной (стандарт JSON)
  4. strip_tags_smart() Пробелы и переносы строк форматируется по-умолчанию.
    Чтобы исключить форматирование, необходимо установить параметр $is_format_spaces = FALSE.
  5. ucs2_to_utf8() Новая функция. Преобразует строку из кодировки UCS-2 в UTF-8, без использования iconv (основной PHP-код -- Юрий Насретдинов)
  6. utf8_unescape() Функция может работать без использования библиотеки iconv.
Back to top
View user's profile Send private message Send e-mail
Shulman Alexandr (Lex)
Заглянувший



Joined: 20 May 2008
Posts: 4
Карма: 1
   поощрить/наказать


PostPosted: Thu May 22, 2008 2:51 pm (спустя 27 дней 1 час 37 минут; написано за 15 секунд)
   Post subject:
Reply with quote

спасибо за подборку. хорошая баблиотека
Back to top
View user's profile Send private message
cevek
Guest





Карма: 386
   поощрить/наказать


PostPosted: Wed Jun 04, 2008 12:39 pm (спустя 12 дней 21 час 47 минут; написано за 5 секунд)
   Post subject: utf8_strpos
Reply with quote

function utf8_strpos($haystack, $needle, $offset = 0){
      # get substring (if isset offset param)
      $offset = ($offset<0) ? 0 : $offset;
      if ($offset>0){
         preg_match('/^.{' . $offset . '}(.*)/us', $haystack, $dummy);
         $haystack = (isset($dummy[1])) ? $dummy[1] : '';
      }

      # get relative pos
      $p = strpos($haystack, $needle);
      if ($haystack=='' or $p===false) return false;
      $r = $offset;
      $i = 0;

      # calc real pos
      while($i<$p){
         if (ord($haystack[$i])<128) {
            # ascii symbol
            $i = $i + 1;
         } else {
            # non-ascii symbol with variable length
            # (handling first byte)
            $bvalue = decbin(ord($haystack[$i]));
            $i = $i + strlen(preg_replace('/^(1+)(.+)$/', '\1', $bvalue));
         }
         $r++;
      }
      return $r;
   }
Back to top
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Thu Jun 05, 2008 1:03 pm (спустя 1 день 24 минуты; написано за 36 секунд)
   Post subject:
Reply with quote

cevek

:-)
Code (php): скопировать код в буфер обмена
function utf8_strpos($haystack, $needle, $offset = null)
{
    if ($offset === null or $offset < 0) $offset = 0;
    if (function_exists (www.php.net/function_exists)('mb_strpos')) return mb_strpos (www.php.net/mb_strpos)($haystack, $needle, $offset, 'utf-8');
    if (function_exists (www.php.net/function_exists)('iconv_strpos')) return iconv_strpos($haystack, $needle, $offset, 'utf-8');
    if (! function_exists (www.php.net/function_exists)('utf8_strlen')) include_once 'utf8_strlen.php';
    $byte_pos = $offset;
    do if (($byte_pos = strpos (www.php.net/strpos)($haystack, $needle, $byte_pos)) === false) return false;
    while (($char_pos = utf8_strlen(substr (www.php.net/substr)($haystack, 0, $byte_pos++))) < $offset);
    return $char_pos;
}
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Thu Jun 05, 2008 5:52 pm (спустя 4 часа 48 минут; написано за 1 минуту 55 секунд)
   Post subject:
Reply with quote

Обновление от 2008-06-05
  1. Func.php -- Добавлен класс-загрузчик
  2. utf8_strpos() -- Добавлена новая функция
  3. censure() -- Добавлено исключение для слова "Hyundai" :)
  4. utf8_str_limit() -- Если длина "хвоста", оставшегося после обрезки текста, меньше $tail_min_length, то текст возвращается без изменений
  5. strip_tags_smart() -- Улучшена обработка ошибок функций preg_*()
  6. html_words_highlight() -- Исправлена ошибка
Back to top
View user's profile Send private message Send e-mail
Bolzamo
Guest





Карма: 386
   поощрить/наказать


PostPosted: Wed Jun 11, 2008 4:18 pm (спустя 5 дней 22 часа 26 минут; написано за 3 минуты 18 секунд)
   Post subject: Косяк
Reply with quote

Жесть вообще!
Архив про UTF-8, а все комментарии на русском языке в кодировке cp1251!
Да и RAR-архиватор для Open Source-подборки - нонсенс! Мне очень понравилась подборка сама по себе, авторы молодцы и очень постарались, но в GNU/Linux мне трудно с ней работать, потому как в редакторе по умолчанию стоит юникод, а добиваться поддержки rar-архивов пришлось скачиванием дополнительного софта.

Взываю к вам! Используйте юникод в комментариях и открытые архиваторы(zip,gz,bz2,7z).
Back to top
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Tue Jun 17, 2008 10:36 am (спустя 5 дней 18 часов 17 минут; написано за 1 минуту 20 секунд)
   Post subject:
Reply with quote

Мне так было удобнее.
А у Вас есть время перевести все комментарии на английский? :)
Back to top
View user's profile Send private message Send e-mail
БорисК
Guest





Карма: 386
   поощрить/наказать


PostPosted: Wed Jun 18, 2008 11:51 am (спустя 1 день 1 час 14 минут; написано за 2 минуты 22 секунды)
   Post subject: сравнительные тесты
Reply with quote

utf8_substr($str, 0, 1000) работает 0.011384 секунд
preg_match("/^.{1000}/su", $str, $matches) - 0.000136
mb_substr - 0.000048
substr (неправильно считает длину и обрезает полсимвола) - 0.000008
iconv_substr - 0.057839
Back to top
БориК
Guest





Карма: 386
   поощрить/наказать


PostPosted: Wed Jun 18, 2008 5:03 pm (спустя 5 часов 12 минут)
   Post subject: еще два варианта utf8_substr
Reply with quote

/**
 * Функция для быстрого примерного(!) отрезания строки в кодировке utf-8
 * только для 2хбайтной кодировки, но после небольшой доработки будет работать и с 3-4хбайтной
 *
 * substr работает только с однобайтными кодировками, поэтому
 * - неправильно отрезает utf8-строку (в байтах, а не символах)
 * учитывая, что русские символы занимают 2 байта, латинские, пробел, вводимые с клавиатуры спецсимволы - 1 байт,
 * то опытным путем подбирается примерный коэффициент 1.8
 * - последний символ может случайно отрезаться частично. Поэтому проверяем, если его код 11xxxxxx (0xC0) - отрезаем его тоже.
 *
 * Зато работает значительно быстрее любой другой функции отрезания utf-8, даже встроенных!
 * Примерный результат теста на shared-хостинге с PHP5 при $length = 1000 и длине входного текста (статья на русском языке) = 5000 символов:
 * utf8_fast_approx_substr (эта функция) - 0.000018 секунды (+ 0.000020 секунды собственно на вызов этой функции)
 * mb_substr (только при установленном пакете MultiByte) - 0.000048 секунды
 * utf8_fast_substr - 0.000126 секунды (+ 0.000020 секунды собственно на вызов этой функции)
 * utf8_substr - 0.011364 секунды (+ 0.000020 секунды собственно на вызов этой функции)
 * iconv_substr (только при установленном пакете Iconv) - 0.057839 секунды
 *
 * @param string $string входная строка в кодировке utf-8
 * @param int $start начальное смещение
 * Если start неотрицателен, возвращаемая подстрока начинается с позиции start от начала строки, считая от нуля.
 * Например, в строке 'abcdef', в позиции 0 находится символ 'a', в позиции 1 - символ 'b', и т.д.
 * Если start отрицательный, возвращаемая подстрока начинается с start символа с конца строки string.
 * Например, в строке 'abcdef', в позиции -1 находится символ 'f', в позиции -2 - символ 'e', и т.д.
 * Если длина строки string меньше или равна start символов, возвращается FALSE.
 * @param int $length длина
 * Если length положительный, то от start будет отсчитано примерно length символов, а последующие отрезаны.
 * Если length отрицательный, то будет отброшено примерно length символов с конца строки string.
 * Если при этом позиция начала подстроки, определяемая аргументом start, находится в отброшенной части строки, возвращается пустая строка.
 *
 * @return string/boolean
 *
 * @author Boris Korobkov
 * @link www.ajaxforum.ru/
 */
function utf8_fast_approx_substr($string, $start, $length = null)
{
    if (function_exists('mb_substr'))
    {
        /* только при установленном пакете MultiByte. mb_substr хоть и медленней этой функции, но зато точнее */
        return mb_substr($string, $offset, $length, 'utf-8');
    }
    
    $string = substr($string, (int) $start * 1.8, (int) $length * 1.8);
    
    /* если последний байт = полсимвола utf-8, удалить его */
    if (ord(substr($string, -1)) & 0xC0)
    {
        $string = substr($string, 0, -1);
    }
    return $string;

}

/**
 * Функция для быстрого отрезания конца строки в кодировке utf-8
 *
 * Примерный результат теста на shared-хостинге с PHP5 при $length = 1000 и длине входного текста (статья на русском языке) = 5000 символов:
 * utf8_fast_approx_substr - 0.000018 секунды (+ 0.000020 секунды собственно на вызов этой функции)
 * mb_substr (только при установленном пакете MultiByte) - 0.000048 секунды
 * utf8_fast_substr (эта функция) - 0.000126 секунды (+ 0.000020 секунды собственно на вызов этой функции)
 * utf8_substr - 0.011364 секунды (+ 0.000020 секунды собственно на вызов этой функции)
 * iconv_substr (только при установленном пакете Iconv) - 0.057839 секунды
 * *
 * @param string $string входная строка в кодировке utf-8
 * @param int $length длина (положительная)
 *
 * @return string
 *
 * @author Boris Korobkov
 * @link www.ajaxforum.ru/
 */
function utf8_fast_substr($string, $length)
{
    if (function_exists('mb_substr'))
    {
        /* только при установленном пакете MultiByte. mb_substr быстрее этой функции */
        return mb_substr($string, 0, $length, 'utf-8');
    }
    
    $pcre = sprintf("/^.{%s}/su", $length);
    $matches = array (
    );
    if (preg_match($pcre, $string, $matches))
    {
        return $matches[0];
    } else
    {
        return $string;
    }

}
Back to top
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Thu Jun 19, 2008 1:53 pm (спустя 20 часов 49 минут; написано за 2 минуты 57 секунд)
   Post subject:
Reply with quote

БориК

Насколько я помню, в библиотеке PCRE было ограничение на кол-во повторов в 65535 символов.
Попробуйте отрезать рег. выражением первые 70,000 символов: /^.{70000}/su

Ваша функция не совместима по параметрам с substr() и utf8_substr() из архива.
Back to top
View user's profile Send private message Send e-mail
БорисК
Guest





Карма: 386
   поощрить/наказать


PostPosted: Wed Jun 25, 2008 4:37 pm (спустя 6 дней 2 часа 44 минуты; написано за 37 секунд)
   Post subject:
Reply with quote

Да, есть ограничение на 64К. Да, другие параметры. И что?
Back to top
Guest






Карма: 386
   поощрить/наказать


PostPosted: Thu Jul 10, 2008 7:01 pm (спустя 15 дней 2 часа 23 минуты; написано за 39 секунд)
   Post subject:
Reply with quote

<?php
Func::setPath(dirname(__FILE__) . '/func/');

$s = Func::call('html_optimize', $s); # PHP < 5.3.0
$s = Func::html_optimize($s); # PHP >= 5.3.0

Func::load('utf8_str_limit', 'strip_tags_smart');
$s = utf8_str_limit(strip_tags_smart($s), 100, null, $is_cutted);
?>


Вот так делаю, а н функцию главную не может найти. Что делать?
Back to top
Стасон
Guest





Карма: 386
   поощрить/наказать


PostPosted: Tue Aug 26, 2008 9:57 am (спустя 1 месяц 15 дней 14 часов 56 минут; написано за 23 секунды)
   Post subject: супер
Reply with quote

Пока просто скачал. Попробую, если работает, то огромное спасибо.
Back to top
beerman
Guest





Карма: 386
   поощрить/наказать


PostPosted: Thu Aug 28, 2008 6:14 am (спустя 1 день 20 часов 16 минут; написано за 15 секунд)
   Post subject:
Reply with quote

прикрутил к drupal'у. работает
Back to top
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Mon Oct 13, 2008 12:45 pm (спустя 1 месяц 16 дней 6 часов 31 минуту; написано за 33 секунды)
   Post subject:
Reply with quote

Обновление от 2008-10-13
  1. hyphen_words() -- добавлена возможность обрабатывать html код
  2. censure() -- улучшен алгоритм работы
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Mon Nov 17, 2008 12:13 pm (спустя 1 месяц 3 дня 23 часа 27 минут; написано за 34 секунды)
   Post subject:
Reply with quote

Обновление от 2008-11-17
  1. strip_tags_smart() -- текст форматируется только в том случае, если были вырезаны какие-либо таги.
  2. utf8_unescape_request() -- если в HTTP_COOKIE есть параметры с одинаковым именем, то берётся последнее значение, а не первое (так обрабатывается QUERY_STRING).
  3. utf8_simple_search_sql -- улучшен поиск целых слов (см. $re_utf8_no_letter_begin), функция может возвращать массив
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 386
   поощрить/наказать


PostPosted: Wed Dec 10, 2008 2:09 pm (спустя 23 дня 1 час 55 минут; написано за 8 секунд)
   Post subject:
Reply with quote

Благодарствую
Back to top
Эдуард83
Guest





Карма: 386
   поощрить/наказать


PostPosted: Thu Dec 11, 2008 11:42 am (спустя 21 час 33 минуты; написано за 53 секунды)
   Post subject:
Reply with quote

function utf8_str_split($str) {
    // place each character of the string into and array
    $split=1;
    $array = array();
    for ( $i=0; $i < strlen( $str ); ){
        $value = ord($str[$i]);
        if($value > 127){
            if($value >= 192 && $value <= 223)
                $split=2;
            elseif($value >= 224 && $value <= 239)
                $split=3;
            elseif($value >= 240 && $value <= 247)
                $split=4;
        }else{
            $split=1;
        }
            $key = NULL;
        for ( $j = 0; $j < $split; $j++, $i++ ) {
            $key .= $str[$i];
        }
        array_push( $array, $key );
    }
    return $array;
}

Работает и в ПХП4
Нашёл в комментах cz.php.net/manual/ru/function.str-split.php#83331

Прошу добавить в сборку
Back to top
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9998
   поощрить/наказать


PostPosted: Thu Dec 11, 2008 9:18 pm (спустя 9 часов 35 минут)
   Post subject:
Reply with quote


М

Ветка выделена в отдельную тему «base64_decode»,
расположенную в форуме Разное :: PHP (11 Декабря 2008, 21:18).
Back to top
View user's profile Send private message
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9998
   поощрить/наказать


PostPosted: Wed Dec 17, 2008 1:50 am (спустя 5 дней 4 часа 32 минуты)
   Post subject:
Reply with quote


М

Ветка выделена в отдельную тему ««Проблемы» с include()»,
расположенную в форуме Лень сходить в Поиск или почитать документацию (17 Декабря 2008, 01:50).
Back to top
View user's profile Send private message
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Wed Dec 17, 2008 12:11 pm (спустя 10 часов 20 минут; написано за 1 минуту 36 секунд)
   Post subject:
Reply with quote

Обновление от 2008-12-17
  1. normal/ -- добавлены скрипты для нормализации UTF-8 из mediawiki.org
  2. class Func -- метод Func::setPath() заменён на метод Func::add_include_path()
  3. utf8_preg_match_all() -- Новая функция
  4. utf8_str_split() -- Новая функция
  5. utf8_chunk_split() -- Новая функция
  6. php2js() -- Некоторые улучшения в коде
  7. utf8_unescape_request() -- Создаёт массив $_POST для нестандартных Content-Type, например, "Content-Type: application/octet-stream". Стандартный PHP 5.2.x создаёт массив только для "Content-Type: application/x-www-form-urlencoded" и "Content-Type: multipart/form-data".
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Mon Dec 22, 2008 4:00 pm (спустя 5 дней 3 часа 49 минут; написано за 46 секунд)
   Post subject:
Reply with quote

Обновление от 2008-12-22
  1. unicode_blocks_check() -- новая функция
  2. utf8_chr() -- новая функция
  3. utf8_ord() -- новая функция
  4. utf16_to_utf8() -- новая функция
  5. ucs2_to_utf8() -- функция удалена, вместо неё используется utf16_to_utf8()
  6. censure() -- улучшен алгоритм работы (remove unicode combining diactrical marks)
  7. оптимизация и улучшения в других функциях, в т.ч. расширение диапазона юникода с UCS-2 до UTF-16!
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Tue Dec 30, 2008 12:02 pm (спустя 7 дней 20 часов 2 минуты; написано за 1 минуту 10 секунд)
   Post subject:
Reply with quote

Обновление от 2008-12-30, рекомендуется обновиться
  1. utf8_unescape() -- исправлена ошибка декодирования %uXXXX в UTF-8
  2. utf8_escape() -- функция удалена, т.к. формат %uXXXX является устаревшим
  3. utf8_unescape_request() -- исправлена ошибка декодирования %uXXXX в UTF-8 (используется utf8_unescape()), оптимизация скорости
  4. utf8_substr_replace() -- новая функция
  5. utf8_casecmp() -- новая функция
  6. utf8_strrev() -- новая функция
  7. оптимизация и улучшения в других функциях
Back to top
View user's profile Send private message Send e-mail
atofigli
Guest





Карма: 386
   поощрить/наказать


PostPosted: Thu Feb 05, 2009 3:18 am (спустя 1 месяц 5 дней 15 часов 15 минут; написано за 56 секунд)
   Post subject: спасибо + вопрос по ucs2 и utf16
Reply with quote

Господа, можно вопрос, почему процедуру конверта из ucs2 заменили utf-16. это одно и то же ?
Back to top
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Goto page 1, 2, 3  Next
Page 1 of 3    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML