ord

(PHP 4, PHP 5, PHP 7)

ordת»»×Ö·û´®µÚÒ»¸ö×Ö½ÚΪ 0-255 Ö®¼äµÄÖµ

˵Ã÷

ord ( string $string ) : int

½âÎö string ¶þ½øÖÆÖµµÚÒ»¸ö×Ö½ÚΪ 0 µ½ 255 ·¶Î§µÄÎÞ·ûºÅÕûÐÍÀàÐÍ¡£

Èç¹û×Ö·û´®ÊÇ ASCII¡¢ ISO-8859¡¢Windows 1252Ö®À൥×Ö½Ú±àÂ룬¾ÍµÈÓÚ·µ»Ø¸Ã×Ö·ûÔÚ×Ö·û¼¯±àÂë±íÖеÄλÖᣠµ«Çë×¢Ò⣬±¾º¯Êý²»»áÈ¥¼ì²â×Ö·û´®µÄ±àÂ룬ÓÈÆäÊDz»»áʶ±ðÀàËÆ UTF-8 »ò UTF-16 ÕâÖÖ¶à×Ö½Ú×Ö·ûµÄ Unicode ´úÂëµã£¨code point£©¡£

¸Ãº¯ÊýÊÇ chr() µÄ»¥²¹º¯Êý¡£

²ÎÊý

string

Ò»¸ö×Ö·û¡£

·µ»ØÖµ

·µ»Ø 0 - 255 µÄÕûÐÍÖµ¡£

·¶Àý

Example #1 ord() ·¶Àý

<?php
$str 
"\n";
if (
ord($str) == 10) {
    echo 
"The first character of \$str is a line feed.\n";
}
?>

Example #2 ¼ì²é UTF-8 ×Ö·û´®µÄÿһ¸ö×Ö½Ú

<?php
declare(encoding='UTF-8');
$str "??";
for ( 
$pos=0$pos strlen($str); $pos ++ ) {
 
$byte substr($str$pos);
 echo 
'Byte ' $pos ' of $str has value ' ord($byte) . PHP_EOL;
}
?>

ÒÔÉÏÀý³Ì»áÊä³ö£º


Byte 0 of $str has value 240
Byte 1 of $str has value 159
Byte 2 of $str has value 144
Byte 3 of $str has value 152

²Î¼û

User Contributed Notes

rowan dot collins at cwtdigital dot com 11-Jun-2013 06:28
Regarding character sets, and whether or not this is "ASCII". Firstly, there is no such thing as "8-bit ASCII", so if it were ASCII it would only ever return integers up to 127. 8-bit ASCII-compatible encodings include the ISO 8859 family of encodings, which map various common characters to the values from 128 to 255. UTF-8 is also designed so that characters representable in 7-bit ASCII are coded the same; byte values higher than 127 in a UTF-8 string represent the beginning of a multi-byte character.

In fact, like most of PHP's string functions, this function isn't doing anything to do with character encoding at all - it is just interpreting a binary byte from a string as an unsigned integer. That is, ord(chr(200)) will always return 200, but what character chr(200) *means* will vary depending on what character encoding it is *interpreted* as part of (e.g. during display).

A technically correct description would be "Returns an integer representation of the first byte of a string, from 0 to 255. For single-byte encodings such as (7-bit) ASCII and the ISO 8859 family, this will correspond to the first character, and will be the position of that character in the encoding's mapping table. For multi-byte encodings, such as UTF-8 or UTF-16, the byte may not represent a complete character."

The link to asciitable.com should also be replaced by one which explains what character encoding it is displaying, as "Extended ASCII" is an ambiguous and misleading name.
arglanir+phpnet at gmail dot com 23-Aug-2012 03:06
As ord() doesn't work with utf-8, and if you do not have access to mb_* functions, the following function will work well:
<?php
function ordutf8($string, &$offset) {
   
$code = ord(substr($string, $offset,1));
    if (
$code >= 128) {        //otherwise 0xxxxxxx
       
if ($code < 224) $bytesnumber = 2;                //110xxxxx
       
else if ($code < 240) $bytesnumber = 3;        //1110xxxx
       
else if ($code < 248) $bytesnumber = 4;    //11110xxx
       
$codetemp = $code - 192 - ($bytesnumber > 2 ? 32 : 0) - ($bytesnumber > 3 ? 16 : 0);
        for (
$i = 2; $i <= $bytesnumber; $i++) {
           
$offset ++;
           
$code2 = ord(substr($string, $offset, 1)) - 128;        //10xxxxxx
           
$codetemp = $codetemp*64 + $code2;
        }
       
$code = $codetemp;
    }
   
$offset += 1;
    if (
$offset >= strlen($string)) $offset = -1;
    return
$code;
}
?>
$offset is a reference, as it is not easy to split a utf-8 char-by-char. Useful to iterate on a string:
<?php
$text
= "abc¨¤¨º?€abc";
$offset = 0;
while (
$offset >= 0) {
    echo
$offset.": ".ordutf8($text, $offset)."\n";
}
/* returns:
0: 97
1: 98
2: 99
3: 224
5: 234
7: 223
9: 8364
12: 97
13: 98
14: 99
*/
?>
Feel free to adapt my code to fit your needs.
v0rbiz at yahoo dot com 28-May-2004 04:15
I did not found a unicode/multibyte capable 'ord' function, so...

<?php
function uniord($u) {
   
$k = mb_convert_encoding($u, 'UCS-2LE', 'UTF-8');
   
$k1 = ord(substr($k, 0, 1));
   
$k2 = ord(substr($k, 1, 1));
    return
$k2 * 256 + $k1;
}
?>