分类: 系统运维
2012-02-22 11:28:58
:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://jjuan-flake.blogbus.com/logs/60154344.html
今天遇到件很恶心的事,某国外歌词网站提供的歌词在源文件里使用“数字;”格式的编码表示abcd....原来小菜我实在才疏学浅不知 此为何物,于是利用八零后特有的搜索引擎控,搜之。片刻得解,此乃html实体编码。平时我们见的 是html的实体字符,其实在后面 还对应一个实体编码。编码表转一个GG/MM的。见附表。
本人试着将编码通过html_entity_decode转换为字符,却发现公司里用的php4,此函数undefined。没办法只好请教师傅终于找到了答案。
这些编码的格式“十六进制/十进制”,是将字符对应的ASCII码转成10/16进制加上 ;之后形成。因此我们只要将后面的数值转换成ASCII码(十进制),然后找到然后就能找到那个字符。这里有师傅送的一个函数(出处不明)
function unhtmlentities($string)
{
// replace numeric entities
$string = preg_replace('/([0-9a-f]+);/ei', 'chr(hexdec(", $string); //针对十六进制
//hexdec()返回与 hex_string 参数所表示的十六进制数等值的的十进制数
//chr返回ascii码对应的字符
$string = preg_replace('~([0-9]+);~e', 'chr(, $string); //针对十进制
echo $string;
// replace literal entities
$trans_tbl = get_html_translation_table(HTML_ENTITIES);
/ get_html_translation_table 返回 htmlentities() 和 htmlspecialchars() 函数使用的翻译表,HTML_ENTITIES/翻译所有需要 URL 编码的字符,以便正确地显示在网页上
$trans_tbl = array_flip($trans_tbl);//反转翻译表的键名和值 值做键名
return strtr($string, $trans_tbl); //返回$string中字符在$trans_tbl中对应的特定字符
}
// 在preg_replace的正则表达式,可以使用e修正符:使用此修正符preg_replace()在替换字符串中对逆向引用做正常替 换,将其作为PHP代码求值(而非简单的字符串),将用其结果替换所搜索字符串。这就是在替换字符串里可以时使用php函数的原因。
附录
HTML实体字符字符 | 十进制字符编号 | 实体名字 | 说明 |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 制表符Horizontal tab | |
— | — | 换行Line feed | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 回车Carriage Return | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | — | 未使用Unused | |
— | Space | ||
! | ! | — | 惊叹号Exclamation mark |
“ | " | " | 双引号Quotation mark |
# | # | — | 数字标志Number sign |
$ | $ | — | 美元标志Dollar sign |
% | % | — | 百分号Percent sign |
& | & | & | Ampersand |
‘ | ' | — | 单引号Apostrophe |
( | ( | — | 小括号左边部分Left parenthesis |
) | ) | — | 小括号右边部分Right parenthesis |
* | * | — | 星号Asterisk |
+ | + | — | 加号Plus sign |
, | , | — | 逗号Comma |
- | - | — | 连字号Hyphen |
. | . | — | 句号Period (fullstop) |
/ | / | — | 斜杠Solidus (slash) |
0 | 0 | — | 数字0 Digit 0 |
1 | 1 | — | 数字1 Digit 1 |
2 | 2 | — | 数字2 Digit 2 |
3 | 3 | — | 数字3 Digit 3 |
4 | 4 | — | 数字4 Digit 4 |
5 | 5 | — | 数字5 Digit 5 |
6 | 6 | — | 数字6 Digit 6 |
7 | 7 | — | 数字7 Digit 7 |
;8 | 8 | — | 数字8 Digit 8 |
9 | 9 | — | 数字9 Digit 9 |
: | : | — | 冒号Colon |
; | ; | — | 分号Semicolon |
< | < | < | 小于号Less than |
= | = | — | 等于符号Equals sign |
> | > | > | 大于号Greater than |
? | ? | — | 问号Question mark |
@ | @ | — | Commercial at |
A | A | — | 大写A Capital A |
B | B | — | 大写B Capital B |
C | C | — | 大写C Capital C |
D | D | — | 大写D Capital D |
E | E | — | 大写E Capital E |
F | F | — | 大写F Capital F |
G | G | — | 大写G Capital G |
H | H | — | 大写H Capital H |
I | I | — | 大写J Capital I |
J | ;J | — | 大写K Capital J |
K | K | — | 大写L Capital K |
L | L | — | 大写K Capital L |
M | M | — | 大写M Capital M |
N | N | — | 大写N Capital N |
O | O | — | 大写O Capital O |
P | P | — | 大写P Capital P |
Q | Q | — | 大写Q Capital Q |
R | R | — | 大写R Capital R |
S | S | — | 大写S Capital S |
T | T | — | 大写T Capital T |
U | U | — | 大写U Capital U |
V | V | — | 大写V Capital V |
W | W | — | 大写W Capital W |
X | X | — | 大写X Capital X |
Y | Y | — | 大写Y Capital Y |
Z | Z | — | 大写Z Capital Z |
[ | [ | --- | 中括号左边部分Left square bracket |
\ | \ | --- | 反斜杠Reverse solidus (backslash) |
] | ] | — | 中括号右边部分Right square bracket |
^ | ^ | — | Caret |
_ | _ | — | 下划线Horizontal bar (underscore) |
` | ` | — | 尖重音符Acute accent |
a | a | — | 小写a Small a |
b | b | — | 小写b Small b |
c | c | — | 小写c Small c |
d | d | — | 小写d Small d |
e | e | — | 小写e Small e |
f | f | — | 小写f Small f |
g | g | — | 小写g Small g |
h | h | — | 小写h Small h |
i | i | — | 小写i Small i |
j | j | — | 小写j Small j |
k | k | — | 小写k Small k |
l | l | — | 小写l Small l |
m | m | — | 小写m Small m |
n | n | — | 小写n Small n |
o | o | — | 小写o Small o |
p | p | — | 小写p Small p |
q | q | — | 小写q Small q |
r | r | — | 小写r Small r |
s | s | — | 小写s Small s |
t | t | — | 小写t Small t |
u | u | — | 小写u Small u |
v | v | — | 小写v Small v |
w | w | — | 小写w Small w |
x | x | — | 小写x Small x |
y | y | — | 小写y Small y |
z | z | — | 小写z Small z |
{ | { | — | 大括号左边部分Left curly brace |
| | | | — | 竖线Vertical bar |
} | } | — | 大括号右边部分Right curly brace |
~ | ~ | — | Tilde |
— | | — | 未使用Unused |
空格Nonbreaking space | |||
¡ | ¡ | ¡ | Inverted exclamation |
¢ | ¢ | ¢ | 货币分标志Cent sign |
£ | £ | £ | 英镑标志Pound sterling |
¤ | ¤ | ¤ | 通用货币标志General currency sign |
¥ | ¥ | ¥ | 日元标志Yen sign |
¦ | ¦ | ¦ or &brkbar; | 断竖线Broken vertical bar |
§ | § | § | 分节号Section sign |
¨ | ¨ | ¨ or ¨ | 变音符号Umlaut |
© | © | © | 版权标志Copyright |
ª | ª | ª | Feminine ordinal |
« | « | « | Left angle quote, guillemet left |
¬ | ¬ | ¬ | Not sign |
| | | Soft hyphen |
® | ® | ® | 注册商标标志Registered trademark |
¯ | ¯ | ¯ or &hibar; | 长音符号Macron accent |
° | ° | ° | 度数标志Degree sign |
± | ± | ± | 加或减Plus or minus |
² | ² | ² | 上标2 Superscript two |
³ | ³ | ³ | 上标3 Superscript three |
´ | ´ | ´ | 尖重音符Acute accent |
µ | µ | µ | Micro sign |
¶ | ¶ | ¶ | Paragraph sign |
· | · | · | Middle dot |
¸ | ¸ | ¸ | Cedilla |
¹ | ¹ | ¹ | 上标1 Superscript one |
º | º | º | Masculine ordinal |
» | » | » | Right angle quote, guillemet right |
¼ | ¼ | ¼ | 四分之一Fraction one-fourth |
½ | ½ | ½ | 二分之一Fraction one-half |
¾ | ¾ | ¾ | 四分之三Fraction three-fourths |
¿ | ¿ | ¿ | Inverted question mark |
À | À | À | Capital A, grave accent |
Á | Á | Á | Capital A, acute accent |
 |  |  | Capital A, circumflex |
à | à | à | Capital A, tilde |
Ä | Ä | Ä | Capital A, di?esis / umlaut |
Å | Å | Å | Capital A, ring |
Æ | Æ | Æ | Capital AE ligature |
Ç | Ç | Ç | Capital C, cedilla |
È | È | È | Capital E, grave accent |
É | É | É | Capital E, acute accent |
Ê | Ê | Ê | Capital E, circumflex |
Ë | Ë | Ë | Capital E, di?esis / umlaut |
Ì | Ì | Ì | Capital I, grave accent |
Í | Í | Í | Capital I, acute accent |
Î | Î | Î | Capital I, circumflex |
Ï | Ï | Ï | Capital I, di?esis / umlaut |
Ð | Ð | Ð | Capital Eth, Icelandic |
Ñ | Ñ | Ñ | Capital N, tilde |
Ò | Ò | Ò | Capital O, grave accent |
Ó | Ó | Ó | Capital O, acute accent |
Ô | Ô | Ô | Capital O, circumflex |
Õ | Õ | Õ | Capital O, tilde |
Ö | Ö | Ö | Capital O, di?esis / umlaut |
× | × | × | 乘号Multiply sign |
Ø | Ø | Ø | Capital O, slash |
Ù | Ù | Ù | Capital U, grave accent |
Ú | Ú | Ú | Capital U, acute accent |
Û | Û | Û | Capital U, circumflex |
Ü | Ü | Ü | Capital U, di?esis / umlaut |
Ý | Ý | Ý | Capital Y, acute accent |
Þ | Þ | Þ | Capital Thorn, Icelandic |
ß | ß | ß | Small sharp s, German sz |
à | à | à | Small a, grave accent |
á | á | á | Small a, acute accent |
â | â | â | Small a, circumflex |
ã | ã | ã | Small a, tilde |
ä | ä | ä | Small a, di?esis / umlaut |
å | å | å | Small a, ring |
æ | æ | æ | Small ae ligature |
ç | ç | ç | Small c, cedilla |
è | è | è | Small e, grave accent |
é | é | é | Small e, acute accent |
ê | ê | ê | Small e, circumflex |
ë | ë | ë | Small e, di?esis / umlaut |
ì | ì | ì | Small i, grave accent |
í | í | í | Small i, acute accent |
î | î | î | Small i, circumflex |
ï | ï | ï | Small i, di?esis / umlaut |
ð | ð | ð | Small eth, Icelandic |
ñ | ñ | ñ | Small n, tilde |
ò | ò | ò | Small o, grave accent |
ó | ó | ó | Small o, acute accent |
ô | ô | ô | Small o, circumflex |
õ | õ | õ | Small o, tilde |
ö | ö | ö | Small o, di?esis / umlaut |
÷ | ÷ | ÷ | 除号Division sign |
ø | ø | ø | Small o, slash |
ù | ù | ù | Small u, grave accent |
ú | ú | ú | Small u, acute accent |
û | û | û | Small u, circumflex |
ü | ü | ü | Small u, di?esis / umlaut |
ý | ý | ý | Small y, acute accent |
þ | þ | þ | Small thorn, Icelandic |
ÿ | ÿ | ÿ | Small y, umlaut |