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

Php 如何将unicode字符串转换为int?,php,utf-8,casting,Php,Utf 8,Casting,我的代码是: <?php echo((int)("١٩")); //Number is 19 ?> 但是,输出是0而不是19。制作两种类型的数字数组,使用str_replace函数。我在这个例子中使用的是孟加拉语字符,您必须将其更改为您的语言 function convert_number($your_num){ $find = array("০", "১", "২", "৩", "৪", "৫", "৬", "৭", "৮", "৯"); $replac

我的代码是:

<?php

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

?>

但是,输出是0而不是19。

制作两种类型的数字数组,使用str_replace函数。我在这个例子中使用的是孟加拉语字符,您必须将其更改为您的语言

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("১৯");
产出:19

PHP casting依赖于strtod,只管理ascii字符,而不管理阿拉伯文-印度文UTF-8字符,尽管它们表示数字;由于这些字符没有转换,所以转换它们的字符将返回零


您应该针对\x{0660}-\x{0669}之类的内容进行测试。数字代码将它们转换为ascii等价物,然后转换为正确的类型

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

然后,我认为您打开一个bug是合理的,因为intstring开始接受utf-8字符串,所以它应该接受那些表示数字的字符。Php可能会处理一般的用户输入,您所识别的情况可能会遇到该函数的其他用法,其行为方式会出乎用户意料


但我不同意你似乎发现的错误会在php中得到修复,因为我认为这是合理的,我也让你检查一下是否有重复。

你到底为什么用非ascii值来表示数字?@iam解码器值由用户发送到服务器。@iam解码器,我不知道该值是否为ascii!如果人们要输入utf-8字符作为数字,那么他们希望它不会起作用。没有一款应用程序会考虑到每一种可能的组合,以了解用户到底在做什么。如果这是来自多个用户,那么您可以对utf-8编码进行preg_替换,但writepost显示不努力并不是一件有趣的事,该用户正在请求向上投票,以便他可以在chat.tnx中再次发布问题,但这是一个坏主意!也许你应该约束用户输入,但用户输入是正确的!这里的问题不是用户输入是否为真,我们假设为真。问题是,现在的系统不知道如何以您想要的方式处理输入;因此,您可以在收集后以任何方式处理它,或者强制用户以系统识别的格式提供输入。@Muihlinn,php casting接受unicode字符串,因此它应该或拒绝调用,因为unicode部分在调用strodConst char*restrict nptr,char**restrict endptr之前是非ascii的,或者将unicode解释为unicode的所有用户都可以键入。不是依赖libc中的strtod;在php接受字符串的方式中,它应该在依赖仅为ascii定义的strtod之前进行一些验证。