Поддержка Проблемы и решения Перед катом появляется странный символ

  • Здравствуйте.
    У меня небольшая проблема, которую не могу решить уже несколько дней.

    Функция <?php wpn_content_limit(get_the_content(),625); ?> ,берет текст из поста, режет его под кат, но сразу после обрезанного текста, перед ссылкой на сам пост она выводит какой-то непонятный символ:

    Пример:
    блаблаб�…Читать полностью

    Прошу помощи! В чем может быть дело?
    Посоветуйте, пожалуйста, как с этим можно справиться?

Просмотр 13 ответов — с 1 по 13 (всего 13)
  • 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.

    Модератор Yuri

    (@yube)

    Самый простой и самый правильный способ — использовать функцию mb_substr. Если хостер не забыл подключить к php расширение mbstring.

    хм. спасибо. Буду пробовать.
    В пхп не слишком грамотен. как попробую — отпишусь

    to Atrax
    Использование Вашего кода выдает 2 ошибки:

    iconv() expects exactly 3 parameters, 5 given in
    Wrong parameter count for substr() in

    Поможете?

    ЗЫ: скобки в конце еще не хватало

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    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)); ?>

    Спасибо! Очень доходчиво. Сейчас попробую — отпишусь

    Проблема сабжа решена!
    Теперь появилась еще одна проблема: сейчас помимо текста, функция стала брать и картинку из начала поста. До этого не брала. Теперь выводимый текст в окнах поплыл и смешался. Не понос так еще что-нибудь(
    Можно как-то задать, чтобы функция не брала теги?

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Воспользоваться вариантом с правкой 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(), и все стало норм.

    Большое спасибо всем за помощь!

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Потому что mb_substr() корректно работает с UTF-8 🙂

    Atrax

    (@atrax)

    Ethical engineer

    Хм… да, со скобками неаккуратно вышло.
    Спасибо SergeyBiryukov за работу над моими ошибками 🙂

    А про mb_ я как-то начисто забыл 🙂

Просмотр 13 ответов — с 1 по 13 (всего 13)
  • Тема «Перед катом появляется странный символ» закрыта для новых ответов.