сравните если с буквой на иврите

Я пишу код, работающий только с английскими буквами. когда я пытаюсь сделать это с буквой на иврите, я получаю ошибку.

код:

<?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";
?>

не работает, как я могу это исправить?


person Idan Neeman    schedule 13.12.2012    source источник
comment
Можете ли вы опубликовать полученную ошибку?   -  person War10ck    schedule 14.12.2012
comment
Это проблема Unicode, а не иврита.   -  person QuentinUK    schedule 14.12.2012
comment
Я не получаю ошибку, мне нравится, но это должно быть   -  person Idan Neeman    schedule 14.12.2012


Ответы (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";
person emartel    schedule 13.12.2012
comment
а если мне нужно сравнить в скрипте еще и с английским словом? - person Idan Neeman; 14.12.2012
comment
PHP строки всегда работают слева направо, поэтому 0 будет крайним левым символом, а -1 крайним правым. Вам нужно будет знать, какую букву вы ищете, чтобы использовать правильный индекс (английский / иврит) - person emartel; 14.12.2012
comment
Мне нужно и то, и другое ... Иногда переменная на иврите, а иногда на английском - person Idan Neeman; 14.12.2012
comment
Текст на иврите всегда отображается RTL. Несмотря на то, что он отображается в правом конце строки, א является первым символом. - person ; 15.12.2012

Ваш код работал правильно (например напечатал tov), когда я сохранил его в файл PHP и запустил. Если вы видите разные результаты, вы можете проверить настройки текстового редактора и убедиться, что вы сохраняете файл как UTF-8.

person Community    schedule 15.12.2012
comment
+1, должен был запустить код, я предположил, что проблема влево / вправо, так как я никогда раньше не имел дела с таким языком - person emartel; 15.12.2012