python实现html代码转义转换
之前记录了从网上翻来的 Python HTMLParser处理HTML转义字符 文档。不过在对带有中文字符的内容进行处理的时候会报错,代码如下:
1# cat html.py
2#/usr/bin/python
3#coding=utf-8
4import HTMLParser
5html_parser = HTMLParser.HTMLParser()
6title = 'eclipse功能<template>学习。e.g : 快速在代码中插入时间戳 - 361way.com'
7newtitle = html_parser.unescape(title)
8print newtitle
报错内容如下:
1Traceback (most recent call last):
2 File "html.py", line 7, in <module>
3 newtitle = html_parser.unescape(title)
4 File "/usr/lib64/python2.6/HTMLParser.py", line 390, in unescape
5 return re.sub(r"&(#?[xX]?(?:[0-9a-fA-F]+|w{1,8}));", replaceEntities, s)
6 File "/usr/lib64/python2.6/re.py", line 151, in sub
7 return _compile(pattern, 0).sub(repl, string, count)
8UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 7: ordinal not in range(128)
解决方法如下:
1#/usr/bin/python
2#coding=utf-8
3import HTMLParser
4import sys
5reload(sys)
6sys.setdefaultencoding('utf-8')
7html_parser = HTMLParser.HTMLParser()
8title = 'eclipse功能<template>学习。e.g : 快速在代码中插入时间戳 - SegmentFault'
9newtitle = html_parser.unescape(title)
10print newtitle
需要载入sys模块,重新设置默认编码为utf8,就不会出错了。不过要处理的内容只不过是一个文章的title部分,而常用的html转义内容也就如下几个:
字符 | 十进制 | 转义字符 |
---|---|---|
” | " | ” |
& | & | & |
> | > | > |
不断开空格(non-breaking space) |
注:不常用的具体可以参看开源中国在线工具上的html转义字符表。
于是决定使用python的replace功能实现一个简单的转义功能函数,具体如下:
1#/usr/bin/python
2#coding=utf-8
3def replace_html(s):
4 s = s.replace('"','"')
5 s = s.replace('&','&')
6 s = s.replace('<','<')
7 s = s.replace('>','>')
8 s = s.replace(' ',' ')
9 s = s.replace(' - 361way.com','')
10 print s
11replace_html(title)
优点就是快速简洁,不依赖于模块,实用时也无需再reload sys模块指定默认编码。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/python-html-escape/3978.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.