我将网站上的所有电子邮件地址编码为ROT-13,然后使用Javascript对地址进行解码(以避免垃圾邮件)。然而,在IE7或IE8中,完全没有解码效果,在Chrome、Safari和Firefox中工作得非常出色。对出了什么问题有什么想法吗?
UPDATE链接"href“正在被正确解码,当单击链接时,链接实际上正常工作。因此,只有链接文本(HTML内容)在解码时失败。
下面是我使用的代码:
/***********************************************
DECODE ROT13 EMAIL LINKS
***********************************************/
$('a.email-encoded').each(function() {
$(this).attr('href', rot13x($(this).attr('href')));
$(this).html(rot13x($(this).html()));
});
function rot13x(s) {
var rxi = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var rxo = 'NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm5678901234';
var map = [];
var buf = '';
for (z = 0; z < rxi.length; z++) {map[rxi.substr(z, 1)] = rxo.substr(z, 1);}
for (z = 0; z < s.length; z++) {
var c = s.charAt(z);
buf += (c in map ? map[c] : c);
}
return buf;
}发布于 2011-06-03 05:53:40
结果发现这个问题与13字解码无关。
Internet中有一个关于电子邮件链接的'href‘属性的"bug“。如果使用javascript更新'href‘,IE会自动更新链接的文本以匹配'href’。
因此,在我的代码,首先'href‘被正确解码,然后IE设置链接文本匹配新的,解码'href’。然后,我们解码已经解码的链接文本,无意中再次对其进行编码。
解决方案是首先将解码后的链接文本存储为var,然后在完成“href”解码后将其用于链接文本。就像这样:
$('a.email-encoded').each(function() {
var oldHref = $(this).attr('href');
var newHref = rot13x(oldHref);
var newLink = rot13x($(this).html());
$(this).attr('href', newHref);
$(this).html(newLink);
});发布于 2011-06-02 21:46:30
每当我看到for循环从零开始并使用<=作为其停止条件时,我就会感到担心:
for (z = 0;z <= s.length;z++) {
当最后定义的元素通常是s[0]和s[length]时,这个成语很容易解除对s[length-1]和s[length]的引用。
IE的JavaScript引擎如何处理字符串的越界读写?
https://stackoverflow.com/questions/6220729
复制相似问题