0
python中是否有函數或包,我可以使用它來編碼字符串,以確保它可以用作CSS string?它需要跳過所有單引號和雙引號和反斜槓,並用\A
替換換行符。使用python編碼字符串的CSS方式
例如:
This is "it", isn't\
it?
應轉換爲
This is \"it\", isn't\\\A it?
非ASCII字符可以原封不動,如果它們被打印成UTF-8。
python中是否有函數或包,我可以使用它來編碼字符串,以確保它可以用作CSS string?它需要跳過所有單引號和雙引號和反斜槓,並用\A
替換換行符。使用python編碼字符串的CSS方式
例如:
This is "it", isn't\
it?
應轉換爲
This is \"it\", isn't\\\A it?
非ASCII字符可以原封不動,如果它們被打印成UTF-8。
看看規則,所有需要轉義的都是引號(單和雙)和換行符。標準沒有提到它,但是這大概也必須擴展到反斜槓字符(通過檢查MDN on the <string>
data type確認)。
正則表達式可以這樣做:
re.sub(r'''['"\n\\]''', lambda m: '\\{:X} '.format(ord(m.group())), inputstring)
這逸出4個字符爲十六進制逃逸是unambigous; {escape}
macro uses the space after the escape to delineate the escape from any content following it。這是最實用的選項;它會產生一個有效的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?
謝謝,我想試試,但要注意的是:(1)不需要十六進制轉義,除了換行。 (2)轉義後必須包含空格,否則以下字符可能被解釋爲十六進制數字的一部分(儘管在本例中不會發生)。 – Jellby 2014-09-06 12:04:41
@Jellby:十六進制轉義是*允許*,並且使用它們使得**更簡單**。這也意味着你不必檢測你是否需要使用'''單引號或'''雙引號。 – 2014-09-06 12:06:32
@Jellby:啊,轉義後的空間實際上並不是內容的一部分,會調整。 – 2014-09-06 12:26:28