2013-12-22 23 views
3

原來這裏是Web應用程序 - http://mathiasbynens.be/demo/email-obfuscator#code轉換馬蒂亞斯Bynens的obfuscate_email()PHP函數的JavaScript函數

我將其轉換爲JavaScript的應用程序 -

function obfuscate_email() { 
    var email = document.OBFUSCATOR.email.value, 
    output = ""; 
    if (!email) { 
    alert("Please enter an email address."); 
    } else { 
    if (document.OBFUSCATOR.reverse.checked) { 
     email = email.split("").reverse().join(""); 
     output = "<span class=\"email\">"; 
    } 
    if (document.OBFUSCATOR.encode.checked) { 
     for (var i = 0; i < email.length; i++) { 
     output += "&#" + email.charCodeAt(i) + ";"; 
     } 
    } else { 
     output += email; 
    } 
    if (document.OBFUSCATOR.reverse.checked) { 
     output += "</span>"; 
    } 

    document.getElementById("output").value = document.OBFUSCATOR.link.checked ? "<a href=\"&#109;&#97;&#105;&#108;&#116;&#111;&#58;" + output + "\">" + output + "</a>" : output; 
    document.getElementById("preview").innerHTML = document.getElementById("output").value; 
    } 
} 

但它不能正常工作時,所有複選框都會被檢查。我怎樣才能解決這個問題?

它不工作,因爲output變得<span class="email">html code</span>這個功能使得outputhref屬性。

回答

1

在JavaScript中,don’t use email.split("").reverse().join("")扭轉一個字符串 - 使用Esreveronline demo):

esrever.reverse('[email protected]'); 
// → '[email protected]' 

要使用HTML實體編碼的文字,你可以使用the he JavaScript libraryonline demo)。

he.encode('[email protected]', { 
    'encodeEverything': true 
}); 
// → '&#x66;&#x6F;&#x6F;&#x40;&#x65;&#x78;&#x61;&#x6D;&#x70;&#x6C;&#x65;&#x2E;&#x63;&#x6F;&#x6D;' 

// or, to encode the already-reversed email address: 
he.encode('[email protected]', { 
    'encodeEverything': true 
}); 
// → '&#x6D;&#x6F;&#x63;&#x2E;&#x65;&#x6C;&#x70;&#x6D;&#x61;&#x78;&#x65;&#x40;&#x6F;&#x6F;&#x66;' 

要回答您的問題,請不要設置innerHTML,因爲這將有效地撤消HTML編碼。改爲設置.textContent