2011-05-04 110 views
2

我在這裏找到一個解決方案的問題..我正在開發一個客戶端的WordPress主題,使用for()循環遍歷頁面的標題,以便它可以包裝在<span> s並垂直顯示..該循環使用strlen()找到標題的長度,但由於一些頁面標題包括'...'或標題中的逗號,它會返回的HTML字符而不是..我不明白什麼是導致通過htmlspecialchars_decode()html_entity_decode()無法正常工作..任何建議?我現在知道的for循環有什麼問題嗎?strlen和特殊字符

既然在這裏要求的是實際代碼:

$p_title = get_the_title($port_page->ID); 
    $title = ''; 

    for($i=0;$i<strlen($p_title);$i++){ 
    if(($p_title[$i])){ 
    $title .="<span>$p_title[$i]</span>"; 
    } 

我使用mb_strlen以及嘗試。與搜索特定的字符替換的問題並不一定能解決,因爲頁面的問題標題是任意由網站所有者設置..

奇怪的是稱號,是不以任何方式進行編碼和回聲正常的在for循環之前..所以這是因爲如果事情是將它..

+1

你能準確地顯示你正在做一個'strlen()'的數據類型嗎?也可能是一些代碼。 – 2011-05-04 17:47:45

+0

你想解碼HTML實體或從字符串中刪除它們嗎?如果你想刪除它們,你必須解碼它們,然後使用str_replace刪除它們。 – 2011-05-04 17:54:25

+0

檢查functions.php文件以查看是否有任何內容正在過濾get_the_title()函數並將其轉換? – 2011-05-04 19:02:18

回答

1

這聽起來很像一個charact呃多字節字符編碼問題。你可以嘗試用mb_strlen()替換strlen(),看看它是否能完成這項工作?

http://php.net/manual/en/function.mb-strlen.php

+0

我試過,沒有成功.. – Tim 2011-05-04 18:53:21

4

strlen()只返回字符串的字節數。某些特殊字符可以用多個字節表示,Unicode還可以使單個「字符」像版權符號(「©」)佔用許多字符(例如&copy;)。

例如,您的「...」(省略號)可以是special character in Unicode

快速和骯髒的解決方案,我建議:

// Example string should be 1 character long, 6 bytes 
$text = "&copy;"; 
$bytes = strlen($text); 

mb_internal_encoding('UTF-8');  
$text = html_entity_decode($text, ENT_QUOTES, "UTF-8");     
$length = mb_strlen($text); 

print "String is ".$length." characters long, ".$bytes." bytes long"; 

請注意,我假設你的字符串已經是UTF-8。如果不是,請先將其轉換。