2016-07-18 93 views
0

我正在爲使用WordPress的客戶建立一個WooCommerce網站,並且我寫了一段代碼,它動態生成帶有產品和產品屬性的表格。當我調用get_title()方法時,它首先給我一個產品父級產品的標題,「→」符號,然後是產品的實際標題。我編寫了這段代碼來刪除「→」符號以及之前的所有內容。爲什麼我的substr調用不能使用→字符?

$name_raw = $product->get_title(); 
$name  = substr($name_raw, ($pos = strpos($name_raw, '→')) !== false ? $pos + 1 : 0); 

它用來完美的工作,但不再是。這段代碼也可以完美地與我放入其中的其他角色進行測試,但與那個愚蠢的小箭頭無關。看起來最近的一個更新,我正在使用的必須刪除了這個方法處理非常規字符的能力。誰能推薦任何可能的解決方案?

+3

只是用多字節版本 – Ghost

+0

任何想法,我怎麼能找出它是什麼?→字符? – MarvinLazer

+1

@MarvinLazer,我認爲Ghost的意思是使用['mb_substr'](https://secure.php.net/manual/en/function.mb-substr.php)而不是'substr'。 – Chris

回答

1

由於這是一個WP環境標題,因此右箭頭字符可能已使用WP表單輸入。我覺得這個角色將被轉換到它的HTML代碼,其中的一個:

→ 
→ 
→ 
→ 
→ 
→ 
→ 

所以我會做這樣的事情:

function no_right_arrow_name($name_raw) { 

    if (empty($name_raw)) 
     return $name_raw; 

    $right_arrows = array(
     '→', 
     '→', 
     '→', 
     '→', 
     '→', 
     '→', 
     '→' 
    ); 

    $name_new = $name_raw; 

    // removes all possible combinations of right arrows 
    foreach ($right_arrows as $right_arrow) 
       $name_new = str_replace($right_arrow, '', $name_new); 

    return $name_new; 
} 

$name_raw = $product->get_title(); 
$name  = no_right_arrow_name($name_raw); 
+0

不是我正在尋找的東西,但是您向我提供瞭解決問題所需的信息!謝謝! – MarvinLazer

+0

@MarvinLazer沒問題。如果幫助您解決問題,請將答案標記爲已接受。 –

相關問題