Atrax
(@atrax)
Ethical engineer
Если строку UTF8 «порезать» по границе многобайтового символа, получите вот такое вот недоразумение.
Спасибо Кэп, за разъяснение.
Да, кодировка utf8. И как же с этим справиться не меняя кодировки?
Atrax
(@atrax)
Ethical engineer
Есть много трюков. Один из них — преобразовать в другую кодировку, обрезать и преобразовать обратно.
<?php echo iconv("windows-1251", "utf-8", substr(iconv("utf-8", "windows-1251",get_the_content(),0,625)); ?>
Как-то так…
Или анализировать 625 символ и, если он 0xFF, обрезать на 624 или 626.
Модератор
Юрій
(@yube)
Самый простой и самый правильный способ — использовать функцию mb_substr. Если хостер не забыл подключить к php расширение mbstring.
хм. спасибо. Буду пробовать.
В пхп не слишком грамотен. как попробую — отпишусь
to Atrax
Использование Вашего кода выдает 2 ошибки:
iconv() expects exactly 3 parameters, 5 given in
Wrong parameter count for substr() in
Поможете?
ЗЫ: скобки в конце еще не хватало
1. В функции wpn_content_limit() нужно заменить substr() на mb_substr().
2. В варианте с iconv() нужно сбалансировать скобки:
<?php echo iconv("windows-1251", "utf-8", substr(iconv("utf-8", "windows-1251", get_the_content()), 0, 625)); ?>
Спасибо! Очень доходчиво. Сейчас попробую — отпишусь
Проблема сабжа решена!
Теперь появилась еще одна проблема: сейчас помимо текста, функция стала брать и картинку из начала поста. До этого не брала. Теперь выводимый текст в окнах поплыл и смешался. Не понос так еще что-нибудь(
Можно как-то задать, чтобы функция не брала теги?
Воспользоваться вариантом с правкой wpn_content_limit(). Или так:
<?php echo iconv("windows-1251", "utf-8", substr(strip_tags(iconv("utf-8", "windows-1251", get_the_content())), 0, 625)); ?>
Ха! очень интересно получилось. Даже не знаю почему.
Вобщем вставил обратно, по совету Сергея, исходный вариант
<?php wpn_content_limit(get_the_content(),625); ?>
Предварительно поменяв в функции wpn_content_limit() — substr() на mb_substr(), и все стало норм.
Большое спасибо всем за помощь!
Потому что mb_substr() корректно работает с UTF-8 🙂
Atrax
(@atrax)
Ethical engineer
Хм… да, со скобками неаккуратно вышло.
Спасибо SergeyBiryukov за работу над моими ошибками 🙂
А про mb_ я как-то начисто забыл 🙂