当我想要解码html实体时,我发现了一个潜在的Dojo错误。看我的例子:
require(["dojox/html/entities", "dojo/dom"], function(entity, dom){
dom.byId('test'). innerHTML = entity.decode('€');
dom.byId('test2').innerHTML = entity.decode('€');
});
divs
都会显示欧元符号。在我的情况下,我想显示&符号后跟'欧元;'。我知道如何才能做到这一点,但这不是我的问题。当我做同样的解码'在jQuery
我得到了预期的结果。
$(document).ready(function(){
$('#test3').html('€').val();
$('#test4').html('€').val();
});
第一个案例将告诉我'&欧元;'(没有空间),第二个'€'
对我来说,jQuery
示例是预期的行为。我是对的,可以打开Dojo
票吗?
答案 0 :(得分:3)
只是查看了JavaScript代码,它确实是一个错误。会发生以下情况:
decode-process使用两个映射,一个用于常规HTML字符(如&
),另一个用于拉丁字符(如€
)。解码时会发生什么following:
// Apply the basic mappings. HTML should always come first when decoding
// as well.
str = _applyDecodingMap(str, dhe.html);
str = _applyDecodingMap(str, dhe.latin);
因为它分两步进行,这意味着在第一步&
转换为&
,第二步€
转换为欧元符号。这里的罪魁祸首是这两个地图的使用,如果它们合并为一个地图就不会发生。
例如,如果您解码"
,它将返回预期的"
,因为两个实体都位于同一地图中。
console.log(entity.decode('"')); // Returns '"'
如果您现在需要解决方案,可以自行合并地图来解决问题:
var allEntities = entity.html.concat(entity.latin);
console.log(entity.decode('€')); // Returns '€'
但请注意,调用innerHTML
也会对实体进行解码,因此您仍会看到欧元符号。
所以,为了回答你的问题,你确实可以开票。请注意,这是DojoX库的一部分(这意味着它是由其他人开发的,而不是Dojo核心提交者)。文件说它仍然保留,但我不知道需要多长时间才能看到。