0

我将网站上的所有电子邮件地址编码为 ROT-13,然后使用 Javascript 解码地址(以避免垃圾邮件)。但是,完全解码在 IE 7 或 8 中不起作用。在 Chrome、Safari、Firefox 中表现出色。关于出了什么问题的任何想法?

更新 链接“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;
}
4

2 回答 2

1

每当我看到一个for循环从零开始并<=用于它的停止条件时,我都会担心:

for (z = 0; z <= s.length; z++) {

当最后一个定义的元素通常是 时,这个习惯用法可以很容易地取消引用s[0]和。s[length]s[length-1]

IE 的 JavaScript 引擎如何处理字符串的越界读写?

于 2011-06-02T21:46:30.170 回答
1

原来问题与 ROT-13 解码无关。

Internet Explorer 中有一个关于电子邮件链接的“href”属性的“错误”。如果您使用 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-03T05:53:40.233 回答