我正在编写这段代码乔恩和马里奥写的。它适用于印地语的辅音(-),但不适用于元音。一个原因可能是我无法为字母(अः)提供两个代码点
我正在尝试这些代码范围- mb - अः
// Used decimal number.
// Error - Fatal error: Allowed memory size of 134217728 bytes
foreach (range(2309, 23092307) as $char) {
$char = html_entity_decode("&#$char;", ENT_COMPAT, "UTF-8");
$alphabets[$char] = ++$i;
}
print_r($alphabets);
在for循环-中也尝试了这个"foreach (range(0x0905, '0x0905 0x0903') as $char "
同样,这段代码:
// Output is Japanese/Chinese characters:
//
function unichr($intval) {
return mb_convert_encoding(pack('n', $intval), 'UTF-8', 'UTF-16BE');
}
function uniord($u) {
$k = mb_convert_encoding($u, 'UCS-2LE', 'UTF-8');
$k1 = ord(substr($k, 0, 1));
$k2 = ord(substr($k, 1, 1));
return $k2 * 256 + $k1;
}
for($char = uniord('अ'); $char <= uniord('अः'); ++$char) {
$alphabet[] = unichr($char);
}
print_r($alphabet);
看起来文件编码也有问题!现在它返回的是:Array ([0] => Array)//只有一行我已经尝试过utf-8和utf-16文档编码。
我认为这是一个大问题,因为अः
没有单一的unicode代码点(字符)。相反,它是两个字符अ
(0x0905或十进制2309)和ः
(0x0903或十进制2907)的组合。
所以你的第一个代码样本循环结束点23092307
是无效的。您所做的只是将两个代码点连接在一起,并将它们视为单个值。
您的第二个代码示例仅生成单个字符,因为它只是使用अः
中两个代码点中的第一个,与अ
相同。
也许你可以看看嵌套循环。让外部循环覆盖基本字符,而内部循环添加组合字符。比如:
<?php
$i = 0;
foreach (range(0x0905, 0x0938) as $char)
{
$txt = html_entity_decode("&#$char;", ENT_COMPAT, "UTF-8");
$alphabets[$txt] = ++$i;
foreach ( range(0x0901, 0x0903) as $combine )
{
$txt = html_entity_decode("&#$char;", ENT_COMPAT, "UTF-8")
. html_entity_decode("&#$combine;", ENT_COMPAT, "UTF-8");
$alphabets[$txt] = ++$i;
}
}
print_r($alphabets);
?>