文字

mb_decode_numericentity

(PHP 4 >= 4.0.6, PHP 5)

mb_decode_numericentity根据 HTML 数字字符串解码成字符

说明

string mb_decode_numericentity ( string $str , array $convmap [, string $encoding = mb_internal_encoding() ] )

将数字 字符串 的引用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

用户评论:

[#1] Navi [2009-04-01 01:00:09]

Manual entity => utf8 conversion:
<?php
        
// parse entities
        
$raw preg_replace_callback
        
(
            
"/&#(\\d+);/u",
            
"_pcreEntityToUtf",
            
$raw
        
);

    function 
_pcreEntityToUtf($matches)
    {
        
$char intval(is_array($matches) ? $matches[1] : $matches);

        if (
$char 0x80)
        {
            
// to prevent insertion of control characters
            
if ($char >= 0x20) return htmlspecialchars(chr($char));
            else return 
"&#$char;";
        }
        else if (
$char 0x8000)
        {
            return 
chr(0xc0 | (0x1f & ($char >> 6))) . chr(0x80 | (0x3f $char));
        }
        else
        {
            return 
chr(0xe0 | (0x0f & ($char >> 12))) . chr(0x80 | (0x3f & ($char >> 6))). chr(0x80 | (0x3f $char));
        }
    }
?>

[#2] donovan at conduit it [2006-04-19 09:05:18]

note that at this time it seems that mb_decode_numericentity() only works with decimal entities and not hexadecimal entities.  This fact would have saved me a good hour of time in debugging.

For those who need to convert hex entities try first converting them all to decimal entities with a combination of the preg_replace() and hexdec() functions.

[#3] dirk at camindo de [2005-01-30 09:51:52]

By use of function utf8_decode you'll get a problem with all extended chars above ISO-8859-1 charset. You can solve this problem by using the 

function mb_encode_numericentity before:

  // convert $text from UTF-8 to ISO-8859-1
  $convmap = array(0xFF, 0x2FFFF, 0, 0xFFFF);
  $text = mb_encode_numericentity($text, $convmap, "UTF-8");
  $text = utf8_decode($text);

The second line encodes all extended chars below 0xFF, the third line converts the rest: 0x80 - 0xFF

[#4] Andrew Simpson [2004-12-10 17:29:14]

Many web browsers will tend upload high order characters as UTF-8 encoded entities. 

Here is some simple code to convert UTF-8 HTML entities within a block of text into proper characters:

<?php
   
//decode decimal HTML entities added by web browser
  
$body preg_replace('/&#\d{2,5};/ue'"utf8_entity_decode('$0')"$body );
  
//decode hex HTML entities added by web browser
  
$body preg_replace('/&#x([a-fA-F0-7]{2,8});/ue'"utf8_entity_decode('&#'.hexdec('$1').';')"$body );

//callback function for the regex
function utf8_entity_decode($entity){
 
$convmap = array(0x00x1000000xfffff);
 return 
mb_decode_numericentity($entity$convmap'UTF-8');
}
?>

[#5] php at cNhOiSpPpAlMe dot org [2004-03-31 00:55:29]

Here are functions to convert hankaku to zenkaku characters (and vice-versa) in Japanese text.

<?php

// Supported characters:
//    (space)
//     !#$%&()*+,./0123456789:;<=>?@
//    ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
//    abcdefghijklmnopqrstuvwxyz{|}
// (Katakana isn't supported.)

function f_han2zen ($string,$encoding null) {
  if (
is_null($encoding)) $encoding mb_internal_encoding();
  
$convmap = array(
     
0x20,0x20,0x3000-0x20,0xffff,   // Space
     
0x21,0x7e,0xff01-0x21,0xffff);
  
$temp mb_encode_numericentity($string,$convmap,$encoding);
  
$convmap = array(0,0xffff,0,0xffff);
  return 
mb_decode_numericentity($temp,$convmap,$encoding);
}
function 
f_zen2han ($string,$encoding null) {
  if (
is_null($encoding)) $encoding mb_internal_encoding();
  
$convmap = array(
     
0x3000,0x3000,-(0x3000-0x20),0xffff,   // Space
     
0xff01,0xff5e,-(0xff01-0x21),0xffff);
  
$temp mb_encode_numericentity($string,$convmap,$encoding);
  
$convmap = array(0,0xffff,0,0xffff);
  return 
mb_decode_numericentity($temp,$convmap,$encoding);
}

// Sample usage:
f_han2zen("test","shift_jis");
f_han2zen("test","utf-8");

?>

[#6] dev at glossword info [2003-11-19 07:43:18]

上一篇: 下一篇: