添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
坚强的蘑菇  ·  父约束 (Parent ...·  4 周前    · 
千杯不醉的生菜  ·  暗部破解 - 百度·  1 年前    · 
冷静的鞭炮  ·  Advanced PDF ...·  2 年前    · 
Authentication Services
Command Line Specific Extensions
Compression and Archive Extensions
Cryptography Extensions
Database Extensions
Date and Time Related Extensions
File System Related Extensions
Human Language and Character Encoding Support
Image Processing and Generation
Mail Related Extensions
Mathematical Extensions
Non-Text MIME Output
Process Control Extensions
Other Basic Extensions
Other Services
Search Engine Extensions
Server Specific Extensions
Session Extensions
Text Processing
Variable and Type Related Extensions
Web Services
Windows Only Extensions
XML Manipulation
GUI Extensions
Keyboard Shortcuts
?
This help
Next menu item
Previous menu item
Previous man page
Next man page
Scroll to bottom
Scroll to top
Goto homepage
Goto search
(current page)
Focus search box
如果字符串是 ASCII、 ISO-8859、Windows 1252之类单字节编码,就等于返回该字符在字符集编码表中的位置。 但请注意,本函数不会去检测字符串的编码,尤其是不会识别类似 UTF-8 或 UTF-16 这种多字节字符的 Unicode 代码点(code point)。 该函数是 chr() 的互补函数。

示例 #2 检查 UTF-8 字符串的每一个字节

<?php
$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
arglanir+phpnet at gmail dot com
13 years ago
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.
rowan dot collins at cwtdigital dot com
12 years ago
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.
paco at olecode dot com
5 years ago
this function convert UTF-8 string to RTF code string. I am using code of v0rbiz at yahoo dot com, thanks!!!

function cadena_rtf($txt)
{
$result = null;

for ($pos = 0; $pos < mb_strlen($txt); $pos++) {

$char = mb_substr($txt, $pos, 1);

if (!preg_match("/[A-Za-z1-9,.]/", $char)) {
//unicode ord real!!!
$k = mb_convert_encoding($char, 'UCS-2LE', 'UTF-8');
$k1 = ord(substr($k, 0, 1));
$k2 = ord(substr($k, 1, 1));
$ord = $k2 * 256 + $k1;

if ($ord > 255) {
$result .= '\uc1\u' . $ord . '*';
} elseif ($ord > 32768) {
$result .= '\uc1\u' . ($ord - 65535) . '*';
} else {
$result .= "\\'" . dechex($ord);
}
} else {
$result .= $char;
}
}
return $result;
}
Noname
3 years ago
<?php

declare ( encoding = 'UTF-8' );

$animalsstr = '🐀🐁🐂🐃🐄🐅🐆🐇🐈🐉🐊🐋🐌🐍🐎🐏🐐🐑🐒🐓🐔🐕🐖🐗🐘🐙'
. '🐚🐛🐜🐝🐞🐟🐠🐡🐢🐣🐤🐥🐦🐧🐨🐩🐪🐫🐬🐭🐮🐯🐰🐱🐲🐳🐴🐵'
. '🐶🐷🐸🐹🐺🐻🐼🐽🐾🐿' ;

$animals = mb_str_split ( $animalsstr );
foreach (
$animals as $animal ) {
for (
$pos = 0 ; $pos < strlen ( $animal ); $pos ++) {
$byte = substr ( $animal , $pos );
echo
"Byte $pos of $animal has value " . ord ( $byte ) . PHP_EOL ;
}
}

?>
Anonymous
4 years ago
For anyone who's looking to convert full strings to map and back it's pretty simple but takes some getting used to...the code below saves an hour of scrounging codes for beginners like myself.

function var2map($a) {
$b='';
$c=strlen($a);
for($i=0; $i<$c; ++$i) {
$d=ord(substr($a,$i,1));
if($d<10) {
$e='00'.$d;
} else {
if($d<100) {
$e='0'.$d;
} else {
$e=$d;
}
}
if($b=='') {
$b=$e;
} else {
$b=$b.$e;
}
}
return $b;
}

function map2var($a) {
$b='';
$c=strlen($a) / 3;
for($i=0; $i<$c; ++$i) {
$d=chr(substr($a,$i*3,3));
if($b=='') {
$b=$d;
} else {
$b=$b.$d;
}
}
return $b;
}