今天遇到件很恶心的事,某国外歌词网站提供的歌词在源文件里使用“&#数字;”格式的编码表示abcd....原来小菜我实在才疏学浅不知此为何物,于是特有的搜索引擎控,搜之。片刻得解,此乃html实体编码。平时我们见的 是html的实体字符,其实在后面 还对应一个实体编码。编码表转一个GG/MM的。见附表。
本人试着将编码通过html_entity_decode转换为字符,却发现公司里用的php4,此函数undefined。没办法只好请教师傅终于找到了答案。
这些编码的格式“&#十六进制/十进制”,是将字符对应的ASCII码转成10/16进制加上&#;之后形成。因此我们只要将&#后面的数值转换成ASCII码(十进制),然后找到然后就能找到那个字符。这里有师傅送的一个函数(出处不明)
functionunhtmlentities($string)
{
// replace numeric entities
$string = preg_replace('/&#x([0-9a-f]+);/ei', 'chr(hexdec("\\1"))', $string); //针对十六进制
//hexdec()返回与 hex_string 参数所表示的十六进制数等值的的十进制数
//chr返回ascii码对应的字符
$string =preg_replace('~&#([0-9]+);~e', 'chr(\\1)',$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 |