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

不工作,我该如何解决?

4

2 回答 2

3

你知道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";
于 2012-12-13T21:42:14.067 回答
1

当我将它保存到 PHP 文件并运行它时,您的代码可以正常工作(例如打印)。tov如果您看到不同的结果,您可能需要检查您的文本编辑器设置并确保您将文件保存为 UTF-8。

于 2012-12-15T07:25:11.480 回答