2016-03-27 15 views
0

私のコードは次のとおりです。ユニコード文字列をintにキャストするにはどうすればよいですか?

<?php 

    echo((int)("١٩")); //Number is 19 

?> 

しかし、出力は、2つのタイプの数、使用str_replace関数の2つの配列を作る代わりに、19

+0

なぜあなたは数値を表すために非ASCII値を使用していますか? –

+0

@ iam-decoderの値は、ユーザーがサーバーに送信します。 – javadaskari

+0

@ iam-decoderと私は値がasciiかどうかわからない! – javadaskari

答えて

6

の0です。この例ではBangla文字を使用していますが、あなたの言語に変更する必要があります。

function convert_number($your_num){ 
    $find = array("০", "১", "২", "৩", "৪", "৫", "৬", "৭", "৮", "৯"); 
    $replace = array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9"); 
    return str_replace($find, $replace, $your_num); 
} 

あなたの番号を変換する必要がある機能を呼び出すだけです。

echo convert_number("১৯"); 

Outoput:19

+0

ありがとう、しかし、私はより良い答えが欲しい。 – javadaskari

+0

よろしくお願いします。 –

4

PHPキャストがstrtodに依存していると、彼らは数字を意味althought ASCIIだけではなくアラビア語INDIC UTF-8文字を管理します。それらをキャストしている文字からの変換がないので、ゼロを返します。

\x{0660}-\x{0669}(数字コード)のようなものに対してテストすると、それをASCII同等のものに変換してから適切なタイプにキャストする必要があります。

+0

tnxですが、これは悪い考えです! – javadaskari

+0

おそらくあなたはユーザー入力を制限するべきです。 – Muihlinn

+0

ユーザー入力はtrueです! – javadaskari

1

@javadaskari、@ Frayne Konokの関数convert_numberとして修正しました。入力番号がasciiでも有効です(有効なままです)。

https://bugs.php.netで、(int) "string"がutf-8文字列を受け入れるようになったので、それがそれらの文字を受け入れるはずであるというバグを開くことが合理的です。 Phpは一般的なユーザーの入力を処理する可能性が高く、ユーザーが識別した大文字小文字は、ユーザーが予期しない方法で動作するその関数の他の使用に遭遇する可能性があります。

しかし、あなたが発見したようなバグは、私のようにPHPで "修正"され、合理的であることを認めるものではありません。

関連する問題