php - mb_substrでUTF-8 16進を1文字としてカウントしますか?

php wordpress substr

まず、phpの初心者です。 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文字としてカウントされます(Unicode値か何かをカウントする必要がありますか?)実際には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(タイトルのテーブルを含む)に設定されています

これを克服する方法はありますか?
答え
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
関連記事

php - 特定の国のコードのみを表示する

php - <?xml />タグとそのコンテンツを削除する

php - CGridViewのCSS操作

php - オープンカート拡張機能の互換性

php - ライオンのアップグレードとphp.iniは見えません

php - CSVファイルへの列の追加[重複]

php - フォームの入力ファイルだけでファイルを送信し、他のフィールドでは送信しない方法は?

php - 開発環境のhttps環境/ SSL証明書をシミュレートするにはどうすればよいですか?

php - php-時間差を取得する

php - サーバー間で一貫性のないセッションのシリアル化