我正在研究code 由乔恩和马里奥撰写。它适用于印地语(क - ह)的辅音,但不适用于元音。一个原因可能是我无法为字母(अः)
提供两个代码点我正在尝试这些代码范围 - अ - अः
// 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(范围(0x0905,'0x0905 0x0903')为$ 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);
它看起来也有文件编码的东西!现在它正在返回: 数组([0] =&gt;अ)//只有一行 我尝试过使用utf-8和utf-16文档编码。
答案 0 :(得分:1)
我认为这是一个很大的问题,因为अः
没有单一的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);
?>