Php/docs/function.mb-decode-numericentity
mb_decode_numericentity
(PHP 4 >= 4.0.6, PHP 5, PHP 7)
mb_decode_numericentity — 根据 HTML 数字字符串解码成字符
说明
mb_decode_numericentity
( string $str
, array $convmap
[, string $encoding
= mb_internal_encoding()
] ) : string
将数字字符串的引用str
按指定的字符块转换成字符串。
参数
str
- 要解码的 string。
convmap
convmap
是一个 array,指定了要转换的代码区域。encoding
encoding
参数为字符编码。如果省略,则使用内部字符编码。
返回值
转换后的字符串。
范例
Example #1 convmap
例子
<?php$convmap = array ( int start_code1, int end_code1, int offset1, int mask1, int start_code2, int end_code2, int offset2, int mask2, ........ int start_codeN, int end_codeN, int offsetN, int maskN );// Specify Unicode value for start_codeN and end_codeN// Add offsetN to value and take bit-wise 'AND' with maskN, // then convert value to numeric string reference.?>
参见
- mb_encode_numericentity() - Encode character to HTML numeric string reference
Example #2 convmap
的例子: 编码(escape) JavaScript 字符串
<?phpfunction escape_javascript_string($str) { $map = [ 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,0,0, // 49 0,0,0,0,0,0,0,0,1,1, 1,1,1,1,1,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,1,1,1,1,1,1,0,0,0, // 99 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, // 149 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, // 199 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, // 249 1,1,1,1,1,1,1, // 255 ]; // Char encoding is UTF-8 $mblen = mb_strlen($str, 'UTF-8'); $utf32 = bin2hex(mb_convert_encoding($str, 'UTF-32', 'UTF-8')); for ($i=0, $encoded=; $i < $mblen; $i++) { $u = substr($utf32, $i*8, 8); $v = base_convert($u, 16, 10); if ($v < 256 && $map[$v]) { $encoded .= '\\x'.substr($u, 6,2); } else if ($v == 2028) { $encoded .= '\\u2028'; } else if ($v == 2029) { $encoded .= '\\u2029'; } else { $encoded .= mb_convert_encoding(hex2bin($u), 'UTF-8', 'UTF-32'); } } return $encoded;} // Test data$convmap = [ 0x0, 0xffff, 0, 0xffff ];$msg = ;for ($i=0; $i < 1000; $i++) { // chr() cannot generate correct UTF-8 data larger value than 128, use mb_decode_numericentity(). $msg .= mb_decode_numericentity('&#'.$i.';', $convmap, 'UTF-8');} // var_dump($msg);var_dump(escape_javascript_string($msg));