我的代码是:
<?php
echo((int)("١٩")); //Number is 19
?>
但输出为0而不是19。
答案 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中你认为合理,我还会让你检查一下是否重复。