2014-02-19 3 views
3

Я генерации HTML через C#не может декодировать строку из C# HttpUtility.JavaScriptStringEncode в JavaScript

myStr = "<span class='red'>September 1980</span><br /><div>abcdef\nhijklm</div>"; 
shtml = "<span class='red' title='<pre>" + HttpUtility.JavaScriptStringEncode(myStr, false) + "</pre>' id='" + jc.FirstOrDefault().UserId + "'>" + content + "</span>" + after; 
... snip snip ...  
<%= shtml %> 

И мой JQuery скрипт для инициализации QTIP является:

$('[title!=""]').each(function(){ 
        $(this).qtip({ 
         hide: { 
          fixed: true, delay: 300 
         }, show: 'mouseover', 
         position: { 
          my: 'top center', 
          at: 'bottom center', 
          viewport: $(window), 
          adjust: { 
           method: 'shift shift' 
           , screen: true 
          } 
         }, style: { 
          classes: 'qtip-light', // Inherit from preset style 
          tip: 'topCenter' 
         } 
        }); 

       }); 

Теперь подсказка показывает :
\ u003cspan класс = \ название u0027abcd \ u0027 = \ u0027September 05, 2013 12: 06 \ u0027 \ u003e \ u003ci

Как я могу вынести СТП l в подсказке? Это ело мое время и мозги ... пожалуйста, помогите!

Примечание: пожалуйста, прочитайте следующую информацию, прежде чем отметить этот вопрос как дубликат:
Я искал все соответствующие сообщения, но ни один из soutions не работал для меня. Мой вариант использования отличается, поскольку я использую qtip, чтобы показать строку, сгенерированную javascriptstringencode.

ответ

0

Я не смог найти встроенную функцию для декодирования данных, которые кодируются с использованием HttpUtility.JavaScriptStringEncode. Поэтому я создал функцию JS после некоторых исследований на разных сайтах.

String.prototype.replaceAll = function(str1, str2, ignore) { 
 
    return this.replace(new RegExp(str1.replace(/([\/\,\!\\\^\$\{\}\[\]\(\)\.\*\+\?\|\<\>\-\&])/g, "\\$&"), (ignore ? "gi" : "g")), (typeof(str2) == "string") ? str2.replace(/\$/g, "$$$$") : str2); 
 
} 
 

 
function decodeJs(encodedString) { 
 
    var decodedString = encodedString; 
 
    decodedString = decodedString.replaceAll("\\u0026", "&"); 
 
    decodedString = decodedString.replaceAll("\\u0027", "\'"); 
 
    decodedString = decodedString.replaceAll("\\u003c", "<"); 
 
    decodedString = decodedString.replaceAll("\\u003e", ">"); 
 
    return decodedString; 
 
} 
 

 
function replaceText() { 
 
    $("*").each(function() { 
 
    if (!$(this).children().length) { 
 
     $(this).text(decodeJs($(this).text())).val(decodeJs($(this).val())); 
 
    } 
 
    }); 
 
} 
 
$(document).ready(replaceText); 
 
$("html").ajaxStop(replaceText);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>