2011-10-23 7 views
0

私はこのために取り組んでいますcode JonとMarioによって書かれています。ヒンディー語の子音では機能しますが、母音では機能しません。一つの理由は、私は手紙のための2つのコード・ポイントを供給することはできませんよ可能(अः)PHPで2バイトのコードポイントを使用する

私は範囲のためにこれらのコードをしようとしています - अ - अःこの同様のループのためにしようとしました

// 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); 

- "($ charとして範囲(0x0905、 '0x0905の0x0903'))foreachの" また

、このコード:

// 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] =>å)//ただ1行 私はutf-8とutf-16のドキュメントエンコーディングを試しました。

+0

私はコードポイントを取得するためにこのサイトを使用: http://www.branah.com/unicode-converterअため - अः –

+1

あなたの最初のバージョンは23の配列を作成しようとしています* *ミリオン**の文字。 UTF-8の場合、1文字あたり最大4バイトになる可能性があるため、理論的には、文字データの場合は80 MBの北のどこかに配列が格納され、次にPHPのオーバーヘッドが考慮されます。 –

答えて

1

अःのユニコードコードポイント(文字)が1つではないので、これは大きな問題だと思います。代わりに、(0x0905または小数点2 309)と(0x0903または小数点2907)の2つの文字の構成です。

23092307の最初のコードサンプルループエンドポイントは無効です。ここで行ったことは、2つのコードポイントを連結して単一の値として扱うことです。

と同じコードポイントのअःの2つのコードポイントのうちの最初のコードポイントを使用しているため、2番目のコードサンプルは1文字のみを生成しています。

おそらくネストされたループを見ることができます。ベース文字の上に外側ループを置き、内部ループにコンポジション文字を追加します。ような何か:

<?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); 
?> 
+0

うん! concatが動作し、私が1と認識する性格を与えるのは驚きではありません。答えは受け入れることができますが、より多くを探しています。 –

関連する問題