Intereting Posts

конвертировать персидские / арабские цифры на английские номера

Как я могу конвертировать персидские / арабские цифры на английские номера с простой функцией?

Персидские / арабские цифры:

۰ // -> 0 ۱ // -> 1 ۲ // -> 2 ۳ // -> 3 ۴ // -> 4 ۵ // -> 5 ۶ // -> 6 ۷ // -> 7 ۸ // -> 8 ۹ // -> 9 

номера по юникоду:

 $num0="۰"; $num1="۱"; $num2="۲"; $num3="۳"; $num4="۴"; $num5="۵"; $num6="۶"; $num7="۷"; $num8="۸"; $num9="۹"; 

Вот короткая функция:

 function convert($string) { $persian = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹']; $arabic = ['٩', '٨', '٧', '٦', '٥', '٤', '٣', '٢', '١','٠']; $num = range(0, 9); $convertedPersianNums = str_replace($persian, $num, $string); $englishNumbersOnly = str_replace($arabic, $num, $convertedPersianNums); return $englishNumbersOnly; } 

Вы можете использовать unicode вместо символов в $persian (я думаю).

это лучше. у нас есть два типа цифр в арабском и персидском языках. мы должны все изменить.

 function convert($string) { $persinaDigits1= array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'); $persinaDigits2= array('٩', '٨', '٧', '٦', '٥', '٤', '٣', '٢', '١', '٠'); $allPersianDigits=array_merge($persinaDigits1, $persinaDigits2); $replaces = array('0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9'); return str_replace($allPersianDigits, $replaces , $string); } 

спасибо @Palladium

Будьте осторожны при копировании кода! Дважды проверьте, как массив представлен в вашем редакторе, или у вас будут проблемы!

Я использую эту функцию. Он преобразует как персидский, так и арабский цифры на английский:

 function faTOen($string) { return strtr($string, array('۰'=>'0', '۱'=>'1', '۲'=>'2', '۳'=>'3', '۴'=>'4', '۵'=>'5', '۶'=>'6', '۷'=>'7', '۸'=>'8', '۹'=>'9', '٠'=>'0', '١'=>'1', '٢'=>'2', '٣'=>'3', '٤'=>'4', '٥'=>'5', '٦'=>'6', '٧'=>'7', '٨'=>'8', '٩'=>'9')); } 

образец:

 echo faTOen("۰۱۲۳۴۵۶۷۸۹٠١٢٣٤٥٦٧٨٩"); // 01234567890123456789 
 $fmt = numfmt_create('fa', NumberFormatter::DECIMAL); echo numfmt_parse($fmt, "۵") . "\n"; // 5 

Для преобразования всех персидских чисел в английский формат вы можете использовать эту функцию:

 function Convertnumber2english($srting) { $srting = str_replace('۰', '0', $srting); $srting = str_replace('۱', '1', $srting); $srting = str_replace('۲', '2', $srting); $srting = str_replace('۳', '3', $srting); $srting = str_replace('۴', '4', $srting); $srting = str_replace('۵', '5', $srting); $srting = str_replace('۶', '6', $srting); $srting = str_replace('۷', '7', $srting); $srting = str_replace('۸', '8', $srting); $srting = str_replace('۹', '9', $srting); return $srting; } 

Вероятно, лучший ответ, использующий какую-то замену, но для его кодирования, это было бы лучше, чем у вас:

 $len = strlen($arabic); for ( $i = 0; $i < $len; ++$i ) { switch( $arabic[$i] ) { case '&#1776': $english .= '0'; break; case '&#1777': $english .= '1'; break; case '&#1778': $english .= '2'; break; // and so on case '&#1785': $english .= '9'; break; default: $english .= $arabic[$i]; } } 

Это должно сделать это.

как насчет чего-то подобного …

 $number = arbic_to_english("&#1777;&#1779;"); echo $number; // 13 function arbic_to_english($number) { $english_number = 0; $matches = array(); preg_match_all('/&#\d{4};/', $number, $matches); if(!count($matches) || !count($matches[0])) { throw new Exception('Invalid number'); } $power = count($matches[0]) - 1; foreach($matches[0] as $arbic_digit) { $english_digit = preg_replace('/&#\d{2}(\d{2});/', '$1', $arbic_digit) - 76; $english_number += $english_digit * pow(10, $power--); } return $english_number; } 

Не нужно разделять входную строку.

 private function convert($input) { $unicode = array('۰', '۱', '۲', '۳', '٤', '٥', '٦', '۷', '۸', '۹'); $english = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'); $string = str_replace($unicode, $english , $input); return $string; } 

Примеры

 convert("۱۲۳٤٥"); //output : 12345 convert("۱۲34٥"); //output : 12345 convert("12345"); //output : 12345 

Из-за того, что люди в Персидском и Арабском регионе могут использовать друг друга, это полное решение для конвертирования обоих типов.

 function convert2english($string) { $newNumbers = range(0, 9); // 1. Persian HTML decimal $persianDecimal = array('&#1776;', '&#1777;', '&#1778;', '&#1779;', '&#1780;', '&#1781;', '&#1782;', '&#1783;', '&#1784;', '&#1785;'); // 2. Arabic HTML decimal $arabicDecimal = array('&#1632;', '&#1633;', '&#1634;', '&#1635;', '&#1636;', '&#1637;', '&#1638;', '&#1639;', '&#1640;', '&#1641;'); // 3. Arabic Numeric $arabic = array('٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'); // 4. Persian Numeric $persian = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'); $string = str_replace($persianDecimal, $newNumbers, $string); $string = str_replace($arabicDecimal, $newNumbers, $string); $string = str_replace($arabic, $newNumbers, $string); return str_replace($persian, $newNumbers, $string); }