非英语语言的PHP字符串函数

非英语语言的PHP字符串函数,php,utf-8,Php,Utf 8,我在尝试range()使用非英语语言的函数。它不起作用 $i =0 foreach(range('क', 'म') as $ab) { ++$i; $alphabets[$ab] = $i; } 输出:a=1 这是印地语(印度)字母表。它只迭代一次(输出显示) 为此,我不知道该怎么办 因此,如果可能的话,请告诉我该怎么做,在考虑使用任何PHP函数处理非英语文本之前,我应该首先做什么 简短回答:这样使用范围是不可能的。 解释 您正在传递字符串作为范围的开始,并且'म' 作为

我在尝试
range()使用非英语语言的函数。它不起作用

$i =0
foreach(range('क', 'म') as $ab) {

    ++$i;

    $alphabets[$ab] = $i;

}
输出:a=1

这是印地语(印度)字母表。它只迭代一次(输出显示)

为此,我不知道该怎么办


因此,如果可能的话,请告诉我该怎么做,在考虑使用任何PHP函数处理非英语文本之前,我应该首先做什么

简短回答:这样使用
范围是不可能的。

解释 您正在传递字符串作为范围的开始,并且'म' 作为结局。您只返回了一个字符,该字符是

您正在返回
a
,因为您的源文件是用UTF-8编码(保存)的。通过以下事实可以看出这一点:
a
是代码点
U+00E0
,而
0xE0
也是UTF-8编码形式的'क' (即
0xE0 0xA4 0x95
)。遗憾的是,PHP没有编码的概念,所以它只接受它在字符串中看到的第一个字节,并将其用作“开始”字符

您只能返回
a
,因为म' 也以
0xE0
开头(因此PHP也认为“结束字符”是
0xE0
a

解决方案 只要有返回UTF-8字符的Unicode码点的函数(还有一个函数的作用相反),您就可以自己将
范围写为
for
循环。所以我在谷歌上找到了这些:

通过以上内容,您现在可以编写:

for($char = uniord('क'); $char <= uniord('म'); ++$char) {
    $alphabet[] = unichr($char);
}

print_r($alphabet);

用于($char=uniord($क'); $char惰性解决方案是使用,并且仅用于最初打算使用的数字范围(它与ASCII一起使用有点傻):


另一个解决方案是转换并获取范围,然后再转换回来

$first = file_get_contents("http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&langpair=|en&q=क");
$second = file_get_contents("http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&langpair=|en&q=म"); //not real value
$jsonfirst = json_decode($first);
$jsonsecond = json_decode($second);
$f = $jsonfirst->responseData->translatedText;
$l = $jsonsecond->responseData->translatedText;
foreach(range($f, $l) as $ab) {


    echo $ab; 

}
输出

ABCDEFGHI

使用数组映射和回调函数将每个英文值翻译回印地语。

我没有得到好的答案,或者有时在得到答案后没有测试自己,但如果有帮助的话,我总是来添加投票。这也是一件好事。:@SatyaPrakash See ans请继续回答(传播知识)让代码工作,特别是:“在考虑使用任何PHP函数处理非英语文本之前,我应该先做什么。”我会投票选出好的答案。PHP中应该有切换按钮谢谢你的精彩解释。但是如何让PHP函数与非英语字符一起工作。如果有人开发了非英语网站,那么他们是如何管理的。非英语文本应该忘记哪些函数?如何知道哪些函数会起作用或不起作用?谢谢!@SatyaPrakash:基本上,除非它是或libr的一部分,否则对非拉丁文本没有任何作用白羊座。我还为答案添加了一个解决方案。干杯!我不敢相信!它起作用了。它不仅显示数字,而且在你的示例代码中也可以看到印地语字符。这些天我对PHP不太感兴趣。所以,我想,即使我自己在谷歌上花了很多时间,我也无法得到答案。+1,很好地创造性地使用了内置功能。它缺乏便利性是的,我考虑过。这不是一个100%的解决方案。
$first = file_get_contents("http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&langpair=|en&q=क");
$second = file_get_contents("http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&langpair=|en&q=म"); //not real value
$jsonfirst = json_decode($first);
$jsonsecond = json_decode($second);
$f = $jsonfirst->responseData->translatedText;
$l = $jsonsecond->responseData->translatedText;
foreach(range($f, $l) as $ab) {


    echo $ab; 

}
ABCDEFGHI