UTF-8 hex считается одним символом с mb_substr? - PullRequest
2 голосов
/ 20 октября 2011

Прежде всего - я начинающий php. Я пытаюсь ограничить длину заголовков в теме WordPress с помощью mb_substr, но он возвращает меньше символов, когда в названии есть определенные символы, такие как «» (апостраф) или «-» (тире).

Вот код, с которым я работаю, общее количество символов до 60 (игнорируйте не-многоточие):

    <?php 
        $short_title = the_title('','',false);
        $short_title_2 = mb_substr($short_title,0,60, 'utf-8');?>
    <h3>
    <a href="<?php the_permalink(); ?>">

            <?php echo $short_title_2; if($short_title_2!=$short_title) { echo "..."; }; ?>
    </a>
</h3>

Так что, в принципе, я не хочу возвращать заголовок, усеченный до 60 символов, но когда у меня есть знаки препинания или другие специальные символы, он считает их как отдельные 6 символов (должно считаться значение Юникода или что-то в этом роде?) это означает, что он на самом деле вернет только 54 символа.

Вот пример и заголовок с черточкой:

Competition - Win Tees from Listen To Your Eyes Clothing Now Ended

Код должен возвращаться:

<h3>Competition - Win Tees from Listen To Your Eyes Clothing Now…</h3>

Что он на самом деле возвращает:

<h3>Competition – Win Tees from Listen To Your Eyes Clothi…</h3>

Кодировка базы данных установлена ​​в utf8_general_ci (включая таблицу для заголовка)

Есть ли способ, которым я могу преодолеть это?

1 Ответ

2 голосов
/ 20 октября 2011

Декодирование html возвращает к нормальному состоянию

$short_title_2 = mb_substr(html_entity_decode($short_title, ENT_QUOTES),0,60, 'utf-8');

http://php.net/manual/en/function.html-entity-decode.php

...