2011-10-20 22 views
2

首先 - 我是一個PHP新手。我試圖使用mb_substr來限制wordpress主題上的標題長度,但是當標題中有某些符號(如「'」(apostraphe)或「 - 」(破折號))時,它會返回更少的字符。UTF-8十六進制計爲單個字符與mb_substr?

這是我的工作代碼,限制了人物的共有60個(忽略非省略號):我wan't這回截斷至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> 

所以基本上字符,但是當我有任何形式的標點符號或其他特殊字符時,它將它們視爲一個單獨的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 (包括標題表)

有什麼辦法可以解決這個問題嗎?

+2

您已經檢查了儀表板一樣被‐,而不是東西 - 你是縮短字符串中? – CodeReaper

回答

2

解碼的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

+0

...並且不要忘記在將它與HTML混合之前再次通過['htmlspecialchars()'](http://php.net/htmlspecialchars)運行輸出。 –

相關問題