2012-12-13 61 views
2

我寫的代碼只能用英文字母。當我試圖用希伯來語字母來做時,我會得到錯誤。如果用希伯來字母比較

代碼:

<?php 
$idan="emr"; 
$firstletter = mb_substr($idan, 0, 1, 'UTF-8'); 
if ($firstletter=='e') 
echo "tov"; 
else echo "lo tove"; 
?> 

工作良好。 但代碼:

<?php 
$idan="אבהבה"; 
$firstletter = mb_substr($idan, 0, 1, 'UTF-8'); 
if ($firstletter=='א') 
echo "tov"; 
else echo "lo tove"; 
?> 

不工作,我該如何解決它?

+0

你能發佈你收到的錯誤嗎? – War10ck

+0

這是一個Unicode而不是希伯來語問題。 – QuentinUK

+0

我沒有得到錯誤,我得到「lo tove」,但它需要「tov」 –

回答

2

你知道mb_substr從左到右工作嗎? (希伯來語是從右向左書寫的?)因此,您正在閱讀的第一個字符是ה而不是א。從右邊(最後一個),使用-1爲出發指標獲得的第一個字母:

$firstletter = mb_substr($idan, -1, 1, 'UTF-8'); 

您還可以使用mb_internal_encoding("UTF-8");設置編碼每次調用,而不是傳播它(如果你是使得許多調用mb_功能)

編輯:按照你的意見,這裏是取決於語言的字母,處理腳本的一個簡單的例子:

$desiredLetter = 'e'; 
$startIndex = 0; 

// some condition to figure out the language 
if(mb_detect_encoding($idan, 'ASCII', true) == FALSE) 
{ 
    $desiredLetter = 'א'; 
    $startIndex = -1; 
} 

$firstletter = mb_substr($idan, $startIndex, 1, 'UTF-8'); 
if ($firstletter == $desiredLetter) 
    echo "tov"; 
else 
    echo "lo tove"; 
+0

,如果我需要在腳本中也與英文單詞比較? –

+0

我需要這樣做,但它也行不通 –

+1

'PHP'字符串總是從左到右工作,所以'0'將是最左邊的字符,'-1'最右邊。你需要知道你正在尋找哪個字母才能使用正確的索引(英語/希伯來語) – emartel

1

您的代碼正常工作(例如打印tov)當我將它保存到一個PHP文件並運行它。如果您看到不同的結果,則可能需要檢查文本編輯器設置並確保將文件保存爲UTF-8。

+0

+1,應該已經運行了代碼,我假設了一個左/右問題,因爲我之前從未處理過這種語言 – emartel