Javascript 和 C# 之间的编码和解码

发布于 2024-09-19 17:16:58 字数 255 浏览 4 评论 0原文

我希望能够将数据发送到这样的 div 中的 Javascript:

<div class="dontDisplay><%= myData %></div>

然而,挑战是 HTML 会变得混乱。那里似乎有太多的编码和解码方案,但我找不到保证与所有可能的输入(包括 Unicode)兼容的 javascript/C# 对。

有谁知道已知的一对能够完美兼容吗?

谢谢

I want to be able to send data to Javascript in a div like this:

<div class="dontDisplay><%= myData %></div>

However, the challenge is that the HTML will get messed up. There seems to be a plethora of encoding and decoding schemes out there, but I can't find a javascript/C# pair that are guaranteed to be compatible for all possible inputs (including Unicode.)

Does anyone know of a pair that are known to be perfectly compatible?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

童话 2024-09-26 17:17:19

您似乎只是将一些文本放入 HTML 文本内容中,正确的方法是普通的旧 HTML 编码:

<div class="dontDisplay"><%= Server.HTMLEncode(myData) %></div>

或在 ASP.NET 4.0 中:

<div class="dontDisplay"><%: myData %></div>

如果 JavaScript 需要提取此内容,您可以使用 DOM 方法:

<div id="foo"><%= Server.HTMLEncode(myData) %></div>
<script type="text/javascript">
    var myData= document.getElementById('foo').firstChild.data;
</script>

尽管这假设存在其中只有一个文本节点,如果 myData 是空字符串,则会中断。您可以通过使用 getTextContent 方法来解决此问题,该方法检查所有 childNodes 是否为文本节点并将它们的 data 添加在一起,或者使用 textContent 对于 IE 可以回退到 innerText,或者使用库来完成此操作(例如 jQuery 中的 text())。

或者,您可以将数据放入属性中:

<div id="foo" title="<%= Server.HTMLEncode(myData) %>">...</div>
<script type="text/javascript">
    var myData= document.getElementById('foo').title;
</script>

如果有合适的可用属性(title 可能不合适)或注释,或者按照 Rune 的建议,使用 JSON 直接放入 JavaScript 变量中。

You appear to be just putting some text into HTML text content, for which the correct approach is plain old HTML-encoding:

<div class="dontDisplay"><%= Server.HTMLEncode(myData) %></div>

or in ASP.NET 4.0:

<div class="dontDisplay"><%: myData %></div>

If JavaScript needs to extract this, you can use DOM methods:

<div id="foo"><%= Server.HTMLEncode(myData) %></div>
<script type="text/javascript">
    var myData= document.getElementById('foo').firstChild.data;
</script>

although this assumes that there's exactly one text node in there, and will break if myData is an empty string. You can work around this by having a getTextContent method that checks all the childNodes for being text nodes and adds their data together, or use textContent with fallback to innerText for IE, or use a library to do it (eg. text() in jQuery).

alternatively you can put the data in an attribute:

<div id="foo" title="<%= Server.HTMLEncode(myData) %>">...</div>
<script type="text/javascript">
    var myData= document.getElementById('foo').title;
</script>

if there is a suitable attribute available (title might not be appropriate), or a comment, or directly into a JavaScript variable using JSON as suggested by Rune.

花伊自在美 2024-09-26 17:17:14

您很可能想使用 json。您可以在页面中嵌入一个字符串,该字符串在脚本标记内使用 json 在页面上创建本地变量:

<script> var myJsonVariabe = { propertyNane: "value" }; </script>

您可以使用 DataContractJsonSerializer

You most probably want to use json. You can embed a string in your page that creates a local variable on your page using json inside a script-tag:

<script> var myJsonVariabe = { propertyNane: "value" }; </script>

You can serialize a .net object to json using the DataContractJsonSerializer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文