Search code examples
phpmagentonumbersarabic

why are arabic numbers (١٢٣) not accepted in textboxes as real numbers?


while developing one of my sites, i noticed that if I enter arabic numbers (١٢٣), they are not interpreted as real number values. Then, I tested a few other sites only to find that they also don't accept arabic numbers.

The problem is, my client seems to require this functionality (accepting arabic numbers).. and I have no idea where to start. My platform is magento (php).


Solution

  • To allow PHP to accept the Arabic numbers or Persian numbers (Farsi) (١٢٣٤٥), I developed this easy function:

    <?php
    
    /*
    /////////////////////
    This function has been created by Abdulfattah alhazmi
    Roles:
    To convert Arabic/Farsi Numbers (٠‎ - ١‎ - ٢‎ - ٣‎ - ٤‎ - ٥‎ - ٦‎ - ٧‎ - ٨‎ - ٩‎) 
    TO the corrosponding English numbers (0-1-2-3-4-5-6-7-8-9)
    http://hazmi.co.cc
    /////////////////////
    */
    
    function convertArabicNumbers($arabic) {
        $trans = array(
            "&#1632;" => "0",
            "&#1633;" => "1",
            "&#1634;" => "2",
            "&#1635;" => "3",
            "&#1636;" => "4",
            "&#1637;" => "5",
            "&#1638;" => "6",
            "&#1639;" => "7",
            "&#1640;" => "8",
            "&#1641;" => "9",
        );
        return strtr($arabic, $trans);
    }
    ?>
    

    Note: TO GET THE CORRECT RESULT from text field in your form, you have to use the htmlspecialchars_decode() function. For example:

    $mytext = htmlspecialchars_decode($_POST['mytext']));
    $mytext = convertArabicNumbers($mytext);
    

    To keep your code safe, add strip_tags(). For example:

    $mytext = strip_tags(htmlspecialchars_decode($_POST['mytext']));
    $mytext = convertArabicNumbers($mytext);
    

    Please don't hesitate to ask me if you have any further question about this function.