如何将unicode字符串转换为int?

时间:2016-03-27 08:23:52

标签: php utf-8 casting

我的代码是:

<?php

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

?>

但输出为0而不是19。

3 个答案:

答案 0 :(得分:5)

使用str_replace函数创建两个数字的两个数组。我在本例中使用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

答案 1 :(得分:4)

PHP转换依赖于strtod并且只管理ascii而不是ARABIC-INDIC UTF-8字符,尽管它们意味着数字;由于没有从这些角色转换,因此投射它们将返回零。

您应该测试类似\x{0660}-\x{0669}(数字代码)的内容,将它们转换为ascii等效项,然后转换为正确的类型。

答案 2 :(得分:1)

@javadaskari,现在将其修改为@Frayne Konok的函数convert_number,即使输入数字为ascii(它仍然有效),您也可以应用它。

然后我认为你有理由在https://bugs.php.net中打开一个错误,因为(int)“string”开始接受utf-8字符串,它应该接受那些意味着数字的字符。 Php可能会处理通用用户输入,并且您识别的情况可能会遇到该功能的其他用途,其行为方式与用户意外相关。

但是我不承认你似乎发现的bug会像我一样“修复”在php中你认为合理,我还会让你检查一下是否重复。