Im Auftrag eines anderen Users:

Spoiler: 


Code (JavaScript):
  1.  
  2. // ==UserScript==
  3. // @name        SpiegelDefoscate
  4. // @namespace   spiegel_defoscate
  5. // @include     http://www.spiegel.de/*
  6. // @version     1
  7. // @grant       none
  8. // ==/UserScript==
  9.  
  10.  
  11. var obfuscatedBlocks = document.querySelectorAll("div.obfuscated-content");
  12. var obfuscatedTexts = document.querySelectorAll(".obfuscated");
  13.  
  14. var obfuscatedIntros = document.querySelectorAll(".js-spiegelplus-obfuscated-intro");
  15. for (var i = 0; i < obfuscatedIntros.length; i++) {
  16.   obfuscatedIntros[i].parentNode.removeChild(obfuscatedIntros[i]);
  17. }
  18.  
  19. for (var i = 0; i < obfuscatedTexts.length; i++) {
  20.   var data = obfuscatedTexts[i].innerHTML;
  21.   var strArray = [];
  22.   var hasOpenTag = false;
  23.  
  24.   var subpos = 0;
  25.   var currentCharCode = 0;
  26.  
  27.   for (var j = 0; j < data.length; j++) {
  28.     if (data[j] == "<") {
  29.      
  30.       switch(data[j+1]) {
  31.         case "a":
  32.           subpos = data.indexOf("</a>", j);
  33.           strArray.push(data.substring(j, subpos + 4));
  34.           j = subpos + 3;
  35.           continue;
  36.           break;
  37.         case "i":
  38.           analyzeCode = data.substr(j, 12);
  39.          
  40.           if (analyzeCode.indexOf("<i>") != -1) {
  41.             strArray.push("<i>");
  42.             j += 2;  
  43.           }
  44.           continue;
  45.           break;
  46.         case "b":
  47.           analyzeCode = data.substr(j, 12);
  48.          
  49.           if (analyzeCode.indexOf("<b>") != -1) {
  50.             strArray.push("<b>");
  51.             j += 2;  
  52.           }
  53.           continue;
  54.           break;
  55.         case "/":
  56.           analyzeCode = data.substr(j, 12);
  57.           if (analyzeCode.indexOf("i>") != -1) {
  58.             strArray.push("</i>");
  59.             j += 3;
  60.             continue;
  61.           } else if (analyzeCode.indexOf("b>") != -1) {
  62.             strArray.push("</b>");
  63.             j += 3;
  64.             continue;
  65.           }
  66.           break;
  67.         default:
  68.           break;
  69.       }
  70.     }
  71.  
  72.     currentCharCode = data.charCodeAt(j);
  73.     if (currentCharCode == 32) {
  74.       strArray.push(" ");
  75.       continue;
  76.     }
  77.  
  78.     if (currentCharCode >= 65 && currentCharCode <= 123) {
  79.       strArray.push(String.fromCharCode((currentCharCode <= 90 ? 90 : 122) >= (currentCharCode = currentCharCode + 25) == 122 ? currentCharCode : currentCharCode - 26));
  80.     } else if (currentCharCode >= 192 && currentCharCode <= 255) {
  81.       strArray.push(String.fromCharCode((currentCharCode <= 255 ? 223 : 255) >= (currentCharCode = currentCharCode + 25) == 255 ? currentCharCode : currentCharCode - 26));
  82.     } else if (currentCharCode >= 33 && currentCharCode <= 64) {
  83.       strArray.push(String.fromCharCode((currentCharCode <= 64 ? 32 : 64) >= (currentCharCode = currentCharCode + 25) == 64 ? currentCharCode : currentCharCode - 26));
  84.     }
  85.   }
  86.  
  87.   obfuscatedTexts[i].innerHTML = strArray.join("");
  88. }
  89.  
  90. for (var i = 0; i < obfuscatedBlocks.length; i++) {
  91.   obfuscatedBlocks[i].className = obfuscatedBlocks[i].className.replace("obfuscated-content", "");
  92. }
  93.  
  94.  
  95.