convertir números persas / arábigas a números ingleses

¿Cómo puedo convertir números persas / arábigos a números en inglés con una función simple?

Números persas / arábigos:

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

números sobre el Unicode:

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

Aquí hay una breve función:

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

Puede usar el Unicode en lugar de los caracteres en $persian (creo).

esta es mejor. tenemos dos tipos de dígitos en árabe y persa. debemos cambiar todo.

 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); } 

gracias @Palladium

¡Ten cuidado al copiar el código! ¡Compruebe dos veces cómo se presenta la matriz en su editor o tendrá problemas!

Yo uso esta función. Convierte números persas y arábigos a inglés:

 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')); } 

muestra:

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

Para convertir todos los números persas a formato inglés, puede usar esta función:

 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; } 

Debido a que las personas de la región persa y árabe quizás utilicen otros idiomas, esta es la solución completa para convertir ambos tipos.

 function convert2english($string) { $newNumbers = range(0, 9); // 1. Persian HTML decimal $persianDecimal = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'); // 2. Arabic HTML decimal $arabicDecimal = array('٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'); // 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); } 

Probablemente sea una mejor respuesta utilizando algún tipo de reemplazo, pero para codificarlo usted mismo, esto sería mejor que lo que tiene:

 $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]; } } 

Deberias hacer eso.

Qué tal algo como esto…

 $number = arbic_to_english("۱۳"); 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; } 

No es necesario dividir la cadena de entrada.

 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; } 

Ejemplos

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