用Python按CSS方式编码字符串
有没有什么函数或者包可以在Python中用来把一个字符串编码成可以用作CSS字符串的格式?这个编码需要把所有的单引号、双引号和反斜杠都进行转义,同时把换行符替换成\A
。
举个例子:
This is "it", isn't\
it?
应该被转换成
This is \"it\", isn't\\\A it?
如果非ASCII字符以utf-8格式打印的话,可以不做处理。
1 个回答
1
根据规则,唯一需要转义的字符就是引号(单引号和双引号)以及换行符。标准没有明确提到,但我们可以推测反斜杠字符也需要转义(通过查看MDN关于<string>
数据类型的说明可以确认这一点)。
我们可以用正则表达式来处理这些字符:
re.sub(r'''['"\n\\]''', lambda m: '\\{:X} '.format(ord(m.group())), inputstring)
这个正则表达式会把这四个字符转换成不容易混淆的十六进制转义字符;{escape}
宏使用转义后的空格来区分转义字符和后面的内容。这是一个最实用的选择;它能生成一个有效的CSS字符串值。
演示:
>>> import re
>>> inputstring = '''This is "it", isn't\nit?'''
>>> re.sub(r'''['"\n\\]''', lambda m: '\\{:X} '.format(ord(m.group())), inputstring)
'This is \\22 it\\22 , isn\\27 t\\A it?'
>>> print(re.sub(r'''['"\n\\]''', lambda m: '\\{:X} '.format(ord(m.group())), inputstring))
This is \22 it\22 , isn\27 t\A it?