我有一个Flex / Actionscript 3应用程序,它在Text元素中显示RSS提要。它删除了任何HTML格式,但它没有正确处理HTML特殊实体代码 - 它将&mdash
渲染为文字字符串,而不是用em-dash等替换它。是否有任何系统的方法可以制作它正确处理这些代码,还是我需要手动替换那些正则表达式的字符串?
text
和htmlText
正确处理字符的有限子集而无需进一步调整 - <
, >
, 
等等(实际上,text
实际上比htmlText
更好地处理它们,因为后者对待<
作为一个字面小于字符。)但是有一个更大的字符集(°
,&mdash
和许多其他字符集)处理不当 - 至少,默认情况下不是。
答案 0 :(得分:7)
这是一种方式:
static private var entityMap:Object = { ' ':' ', '¡':'¡', '¢':'¢', '£':'£', '¤':'¤', '¥':'¥', '¦':'¦', '§':'§', '¨':'¨', '©':'©', 'ª':'ª', '«':'«', '¬':'¬', '­':'­', '®':'®', '¯':'¯', '°':'°', '±':'±', '²':'²', '³':'³', '´':'´', 'µ':'µ', '¶':'¶', '·':'·', '¸':'¸', '¹':'¹', 'º':'º', '»':'»', '¼':'¼', '½':'½', '¾':'¾', '¿':'¿', 'À':'À', 'Á':'Á', 'Â':'Â', 'Ã':'Ã', 'Ä':'Ä', 'Å':'Å', 'Æ':'Æ', 'Ç':'Ç', 'È':'È', 'É':'É', 'Ê':'Ê', 'Ë':'Ë', 'Ì':'Ì', 'Í':'Í', 'Î':'Î', 'Ï':'Ï', 'Ð':'Ð', 'Ñ':'Ñ', 'Ò':'Ò', 'Ó':'Ó', 'Ô':'Ô', 'Õ':'Õ', 'Ö':'Ö', '×':'×', 'Ø':'Ø', 'Ù':'Ù', 'Ú':'Ú', 'Û':'Û', 'Ü':'Ü', 'Ý':'Ý', 'Þ':'Þ', 'ß':'ß', 'à':'à', 'á':'á', 'â':'â', 'ã':'ã', 'ä':'ä', 'å':'å', 'æ':'æ', 'ç':'ç', 'è':'è', 'é':'é', 'ê':'ê', 'ë':'ë', 'ì':'ì', 'í':'í', 'î':'î', 'ï':'ï', 'ð':'ð', 'ñ':'ñ', 'ò':'ò', 'ó':'ó', 'ô':'ô', 'õ':'õ', 'ö':'ö', '÷':'÷', 'ø':'ø', 'ù':'ù', 'ú':'ú', 'û':'û', 'ü':'ü', 'ý':'ý', 'þ':'þ', 'ÿ':'ÿ', 'ƒ':'ƒ', 'Α':'Α', 'Β':'Β', 'Γ':'Γ', 'Δ':'Δ', 'Ε':'Ε', 'Ζ':'Ζ', 'Η':'Η', 'Θ':'Θ', 'Ι':'Ι', 'Κ':'Κ', 'Λ':'Λ', 'Μ':'Μ', 'Ν':'Ν', 'Ξ':'Ξ', 'Ο':'Ο', 'Π':'Π', 'Ρ':'Ρ', 'Σ':'Σ', 'Τ':'Τ', 'Υ':'Υ', 'Φ':'Φ', 'Χ':'Χ', 'Ψ':'Ψ', 'Ω':'Ω', 'α':'α', 'β':'β', 'γ':'γ', 'δ':'δ', 'ε':'ε', 'ζ':'ζ', 'η':'η', 'θ':'θ', 'ι':'ι', 'κ':'κ', 'λ':'λ', 'μ':'μ', 'ν':'ν', 'ξ':'ξ', 'ο':'ο', 'π':'π', 'ρ':'ρ', 'ς':'ς', 'σ':'σ', 'τ':'τ', 'υ':'υ', 'φ':'φ', 'χ':'χ', 'ψ':'ψ', 'ω':'ω', 'ϑ':'ϑ', 'ϒ':'ϒ', 'ϖ':'ϖ', '•':'•', '…':'…', '′':'′', '″':'″', '‾':'‾', '⁄':'⁄', '℘':'℘', 'ℑ':'ℑ', 'ℜ':'ℜ', '™':'™', 'ℵ':'ℵ', '←':'←', '↑':'↑', '→':'→', '↓':'↓', '↔':'↔', '↵':'↵', '⇐':'⇐', '⇑':'⇑', '⇒':'⇒', '⇓':'⇓', '⇔':'⇔', '∀':'∀', '∂':'∂', '∃':'∃', '∅':'∅', '∇':'∇', '∈':'∈', '∉':'∉', '∋':'∋', '∏':'∏', '∑':'∑', '−':'−', '∗':'∗', '√':'√', '∝':'∝', '∞':'∞', '∠':'∠', '∧':'∧', '∨':'∨', '∩':'∩', '∪':'∪', '∫':'∫', '∴':'∴', '∼':'∼', '≅':'≅', '≈':'≈', '≠':'≠', '≡':'≡', '≤':'≤', '≥':'≥', '⊂':'⊂', '⊃':'⊃', '⊄':'⊄', '⊆':'⊆', '⊇':'⊇', '⊕':'⊕', '⊗':'⊗', '⊥':'⊥', '⋅':'⋅', '⌈':'⌈', '⌉':'⌉', '⌊':'⌊', '⌋':'⌋', '⟨':'〈', '⟩':'〉', '◊':'◊', '♠':'♠', '♣':'♣', '♥':'♥', '♦':'♦', '"':'"', '&':'&', '<':'<', '>':'>', 'Œ':'Œ', 'œ':'œ', 'Š':'Š', 'š':'š', 'Ÿ':'Ÿ', 'ˆ':'ˆ', '˜':'˜', ' ':' ', ' ':' ', ' ':' ', '‌':'‌', '‍':'‍', '‎':'‎', '‏':'‏', '–':'–', '—':'—', '‘':'‘', '’':'’', '‚':'‚', '“':'“', '”':'”', '„':'„', '†':'†', '‡':'‡', '‰':'‰', '‹':'‹', '›':'›', '€':'€' };
static public function convertEntities(str:String):String
{
var re:RegExp = /&\w*;/g
var entitiesFound:Array = str.match(re);
var entitiesConverted:Object = {};
var len:int = entitiesFound.length;
var oldEntity:String;
var newEntity:String;
for (var i:int = 0; i < len; i++)
{
oldEntity = entitiesFound[i];
newEntity = entityMap[oldEntity];
if (newEntity && !entitiesConverted[oldEntity])
{
str = str.split(oldEntity).join(newEntity);
entitiesConverted[oldEntity] = true;
}
}
return str;
}
信用到期的信用:这个代码是由我的熟人(蒂姆霍金斯)优化的,该熟人是从原Flash HTML Entities Suck修改的。
答案 1 :(得分:2)
您可以尝试使用htmlText
属性设置文字,而不是text
属性。
这应该将任何html实体转换为正确的符号。
答案 2 :(得分:0)
James Fassett发布的最佳答案非常好,但它有4个字符被省略:&lt; &GT; “和&amp ;,因为regexp正在检查以&amp;开头并以#结尾的字符串;这四个字符被省略。请记住,如果你正在尝试编码XML(包含&lt;和&gt;字符),例如,应显示为文本。