2014-10-17 52 views
0

我使用this solution在wordpress中搜索短語。該功能是本搜索函數返回strpos()警告

function excerpt($text, $phrase, $radius = 100, $ending = "...") { 


    $phraseLen = strlen($phrase); 
    if ($radius < $phraseLen) { 
     $radius = $phraseLen; 
    } 

    $phrases = explode (' ',$phrase); 

    foreach ($phrases as $phrase) { 
     $pos = strpos(strtolower($text), strtolower($phrase)); 
     if ($pos > -1) break; 
    } 

    $startPos = 0; 
    if ($pos > $radius) { 
     $startPos = $pos - $radius; 
    } 

    $textLen = strlen($text); 

    $endPos = $pos + $phraseLen + $radius; 
    if ($endPos >= $textLen) { 
     $endPos = $textLen; 
    } 

    $excerpt = substr($text, $startPos, $endPos - $startPos); 
    if ($startPos != 0) { 
     $excerpt = substr_replace($excerpt, $ending, 0, $phraseLen); 
    } 

    if ($endPos != $textLen) { 
     $excerpt = substr_replace($excerpt, $ending, -$phraseLen); 
    } 

    return $excerpt; 

}

的事情是,因爲WordPress的4.0這個停止工作,並且我得到Warning: strpos(): Empty needle警告。

我試過檢查$pos是否爲空,空等,還有$text$phrase,但沒有運氣。

任何人都有解決這個問題的辦法嗎?

編輯:由VolkerK答案是確定的,但我想搜索的不是所以我就返回一個錯誤:

if(empty($phrase)){ 
    return; 
} 

在功能的開始。工作正常。 :D

回答

1

不知何故strtolower($phrase)在調用strpos時必須求值爲空字符串,所以讓我們使用一個函數來過濾掉空的(子)字符串並進行更多的測試。

$phrases = preg_split('!\s+!', $phrase, -1, PREG_SPLIT_NO_EMPTY); 
if (empty($phrases)) { 
    trigger_error('empty phrase', E_USER_ERROR); 
} 

foreach ($phrases as $phrase) { 
    $phrase = strtolower($phrase); 
    if (0==strlen($phrase)) { 
     trigger_error('empty phrase', E_USER_ERROR); 
    } 
    $pos = strpos(strtolower($text), strtolower($phrase)); 
    if ($pos > -1) break; 
} 
// you probably should test ($pos > -1) here again 

還看到:
http://docs.php.net/preg_split
http://docs.php.net/trigger_error

+0

這將返回'致命錯誤:空phrase',我想這是因爲'trigger_error( '空話',E_USER_ERROR)的;',對吧? – 2014-10-17 12:31:31