2012-06-13 37 views
0

工作,我想您在希臘等於兩句此功能:平等犯規用PHP

private function process_line_three($target_line_three,$case_line_three){ 
     $target_line_three=trim($target_line_three); 
     $case_line_three=trim($case_line_three); 
     echo "<br/><br/>"; 
     var_dump($case_line_three); 
     echo "<br/><br/>"; 
     echo mb_detect_encoding($target_line_three); 
     echo "<br/><br/>"; 
     echo mb_detect_encoding($case_line_three); 
     //$this->print_chars_not_equal($target_line_three,$case_line_three); 

    return strcasecmp($target_line_three, $case_line_three)==0; 
    } 

當我通過他們下面的兩個字符串我得到這個:

Line 3: case Συνδέσου με χιλιάδες ανθρώπους Παρακολούθησε & δράσε ζωντανά 24/7==Συνδέσου με χιλιάδες ανθρώπους Παρακολούθησε & δράσε ζωντανά 24/7 

但平等在這裏失敗..我對這個結果返回錯誤,即使兩個句子都是相似的。爲什麼這樣呢?

UPDATE:

的var_dump($ case_line_three);串(117) 「Συνδέσουμεχιλιάδες ανθρώπουςΠαρακολούθησε&δράσεζωντανά24/7」

同時,我也想找到一個編碼問題

更新2: 輸出爲:

string(117) "Συνδέσου με χιλιάδες ανθρώπους Παρακολούθησε & δράσε ζωντανά 24/7" 

UTF-8

UTF-8

兩個字符是UTF

更新3 輸出,當我寫一個文件:

Συνδέσου με χιλιάδες ανθρώπους Παρακολούθησε &amp; δράσε ζωντανά 24/7 

Συνδέσου με χιλιάδες ανθρώπους Παρακολούθησε & δράσε ζωντανά 24/7 
+0

您正在使用UTF-8的工作,[右](http://webcollab.sourceforge.net/unicode.html)? – AleksanderKseniya

+0

嘗試使用的var_dump(),而不是呼應,顯示這兩個值 –

+1

使用MB的字符串作爲比較字符不正常 –

回答

1

你可以使用strncmp兩個字符串的字符比較字符,當他們不相等時停止。然後你可以確定哪個字符是不同的。 levenshtein可能會告訴你有多少個字符是不同的。

$a = 'Συνδέσου με χιλιάδες ανθρώπους Παρακολούθησε & δράσε ζωντανά 24/7'; 
$b = 'Συνδέσου με χιλιάδες ανθρώπους Παρακολούθησε & δράσε ζωντανά 24/7'; 

$i=1; $l=strlen($a); $equals=true; 
while ($i<=$l && $equals) { 
    if (strncmp($a, $b, $i) != 0) { 
     $equals = false; 
    } else { 
     $i++; 
    } 
} 
if ($equals) { 
    echo 'Strings are equal'; 
} else { 
    echo 'Character '.$i.' is not equal'; 
} 

字符串對我來說是相等的,所以它可能是一個編碼問題。您可以使用mb-detect-encoding來檢查違規字符的編碼http://www.php.net/manual/en/function.mb-detect-encoding.php

+0

感謝... ..萊文斯坦我會嘗試 –

+0

這是一個潛在的解決方案的感謝..我會嘗試它現在..都應該是utf ..我從我的數據庫中的數據。它有utf8_unicode_ci \t的整理,我也把我的所有查詢是UTF –

+0

這是一個可怕的解決方案,因爲它只不過是重新實現'strcmp()'而已。 – Niko

1

嘗試使用PHP本地方法strcasecmp() - http://php.net/strcasecmp

+0

hmmm .. nah ..解決不了太多 –

+0

strcasecmp()不是多字節安全的 –

2

你可以嘗試:

if(strcmp ($target1 , $target2) == 0); 

第二種選擇方案將使用多字節編碼不區分大小寫比較....

function mb_strcasecmp($target1, $target2, $encoding = null) { 
    if (null === $encoding) { $encoding = mb_internal_encoding(); } 
    return strcmp(mb_strtoupper($target1, $encoding), mb_strtoupper($target2, $encoding)); } 
+0

hmmm ..沒有工作 –

+0

你是否在本地服務器上這樣做?運行PHP服務器的操作系統是什麼? –

+0

試圖解決方案,那並不解決太多 –

-2

是否有編碼問題?

嘗試使用這樣的:

return (strcmp($target_line_three, $case_line_three) == 0); 

strcmp()是區分大小寫的。對於不區分大小寫,使用strcasecmp()

+0

調用未定義的函數strcomp() –

+0

哇..第二個已經工作..感謝 –

+0

其實,它的工作..更糟....大聲笑 –