Чем быстрее всего отрезать строку в кодировке UTF-8
Решил протестировать — чем быстрее всего можно отрезать строку в кодировке
Я взял строку в 700
- хуже всех справилась реализация на чистом PHP — 0.34 сек
- получше — iconv_substr. 0.063 сек
- ещё лучше — mb_substr. 0.0175 сек
- лучше всех — preg_replace. 0.005 сек
Если кому интересно, вот моя функция по проходу по строке в кодировкеUTF-8:
$len = strlen($text);
for ($pos = $cutted = 0; $cutted < $cut && $pos < $len; ++$cutted)
{
$ch = ord($text[$pos]);
// multibyte char
if (0x80 & $ch)
{
for (; $ch & 0x80; ++$pos, $ch <<= 1);
}
else
{
$pos++;
}
}Итак, лучший способ отрезать первые $N символов
preg_replace('/^(.{'.$N.'}).*$/uSs', '$1', $text)
Комментарии 17
Мне кажется такие вещи вредно включать в долговременную память. Позиции могут измениться с любой новой версией языка или библиотек.
Хотел показать, только что на hackety.org натолкнулся, аналог NodeBox на Lua. I thought you might like.
http://www.4p8.com/lew/gallery.html
А вообще комментарии по рсс это сила. Жаль всех на эту технологию на пересадишь :). Да и преобразователь
И написать тестик (в рамках
RSS починил. Реализовать просто — робот получает
Оффтоп эгейн: я смотрю тег пустой — предлагаю писать туда название статьи (если есть) — в
Я вот долго думал — что туда писать, пожалуй, можно и название статьи, да. Спасибо за идею!
http://razetdinov.ya.ru/replies.xml?item_no=104
Искал, ничего толкого не нашёл. В итоге создал ящик на гмыле и подписался по imap.
Уже пробовал, в гмэйловом RSS не отдаются тела сообщений
значит нужно просто найти другого
всё равно нам туда не заходить при новом раскладе :)
Я использую
Мою реализацию utf8_substr() смотрите здесь:
http://forum.dklab.ru/viewtopic.php?t=17146
P.S.
Ввод несуществующего имени для OpenID получает PHP wanring и notice на странице.
У меня задачи собственные, мне столько резать не надо :)
Warning: preg_replace(): Compilation failed: number too big in {} quantifier at offset 9 in /root/- on line 6
Но буду иметь ввиду, спасибо, я об этом не знал. Значит вариант такой — проверяем длину, далее — в зависимости от.
preg_replace('/^(.{200}).*/us', '\1', $txt);