如何在php range()中使用阿拉伯字母


How use arabic letters in php range()

我想使用阿拉伯字母作为范围函数的输入:

foreach (range('ا', 'ی') as $letter) {
    echo $letter;
}

我找不到任何解决方案。

您不能使用range()来实现这一点,因为它只适用于ASCII字符,但您可以使用这个"alphabet()"函数来实现类似的功能:

/*
 * By Darien Hager, Jan 2007... Use however you wish, but please
 * please give credit in source comments.
 *
 * Change "UTF-8" to whichever encoding you are expecting to use.
 */
function ords_to_unistr($ords, $encoding = 'UTF-8') {
    // Turns an array of ordinal values into a string of unicode characters
    $str = '';
    for ($i = 0; $i < count($ords); $i++) {
        // Pack this number into a 4-byte string
        // (Or multiple one-byte strings, depending on context.)
        $v = $ords[$i];
        $str .= pack("N",$v);
    }
    $str = mb_convert_encoding($str,$encoding,"UCS-4BE");
    return($str);
}
function unistr_to_ords($str, $encoding = 'UTF-8') {
    // Turns a string of unicode characters into an array of ordinal values,
    // Even if some of those characters are multibyte.
    $str = mb_convert_encoding($str,"UCS-4BE",$encoding);
    $ords = array();
    // Visit each unicode character
    for ($i = 0; $i < mb_strlen($str,"UCS-4BE"); $i++) {
        // Now we have 4 bytes. Find their total
        // numeric value.
        $s2 = mb_substr($str,$i,1,"UCS-4BE");
        $val = unpack("N",$s2);
        $ords[] = $val[1];
    }
    return($ords);
}
function alphabet($firstCharacter = 'A', $lastCharacter = 'Z') {
    $firstCharacterValue = unistr_to_ords($firstCharacter)[0];
    $lastCharacterValue = unistr_to_ords($lastCharacter)[0];
    if ($firstCharacterValue < $lastCharacterValue) {
        for ($character = $firstCharacterValue; $character <= $lastCharacterValue; ++$character) {
            yield ords_to_unistr(array($character));
        };
    } else {
        for ($character = $firstCharacterValue; $character >= $lastCharacterValue; --$character) {
            yield ords_to_unistr(array($character));
        };
    }
}

然后使用

foreach (alphabet('ا', 'ی') as $letter) {
    echo $letter;
}

演示

使用utf-8作为页面、数据库和服务器的主要编码(它允许您使用任何语言,而不仅仅是阿拉伯语!例如中文)

如果您使用第三方服务器,并且无法更改服务器的配置,则可以始终强制在php中进行编码

header('Content-Type: text/html; charset=utf-8');

如果您的数据库不支持UTF-8,则可以使用二进制而不是文本