我想将数据从服务器发送到客户端,其中javascript代码可以访问数据。这基本上是一个字符串消息,我想在我的自定义属性中嵌入这样的内容:
<div my-message="here is my custom data">
经过短暂的测试后,我认识到邮件本身可以包含特殊的字符,例如“嵌入后html会不正确。
(编码?)字符串数据的正确方法是什么? (服务器端是ASP MVC)
是否有任何javascript支持解码字符串?显然说base64可以做到,但听起来有点奇怪,而且我也不想在这里重新发明轮子。
答案 0 :(得分:1)
<div data-my-message="@("your string with \" goes here")">
或者如果你在模型中持有字符串
<div data-my-message="@Model.Message">
<div data-my-message="<%: "your string with \" goes here" %>">
Razor的@()
或ASPX的<%: %>
会对其进行正确编码。
BTW如果您想直接在视图中嵌入字符串,可以使用"
\"
您可以使用jQuery轻松阅读
$(selector).data("my-message")
或普通javascript
document.querySelector(selector).dataset.myMessage
另外,您应该在自己的自定义属性前加data-
作为@Erik飞利浦在评论中所说的
答案 1 :(得分:0)
您可以使用encodeURI
和encodeURIComponent
功能进行编码。并用于解码函数decodeURI
和decodeURIComponents
。
你可以在这里查看它们:
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
答案 2 :(得分:-1)
如果你想发送任意数据(即数组,对象等),那么我使用以下内容:
类似的东西(我在PHP中做过,所以.net语法可能有点错误
<% Dim Serializer As New System.Web.Script.Serialization.JavaScriptSerializer %>
<div data-foo='<%=Serializer.Serialize(MyData).Replace("'", "’") %>'>Some content</div>
要使用的数据位于变量MyData
中具有以下优势:当你获得数据时,你会自动获得一个对象(至少,使用jQuery,但我会想象使用普通的js - 如果没有,那么它很容易重新创建对象)
<强>更新强>
关于双引号的评论,如果你的数据只是一个字符串,那么你应该替换双引号购买他们的html实体。或者确保你使用json-deode。如果它只是一个字符串,它不会被自动识别为json数据并被解码。 PHP(我已经使用了更多)将字符串中的双引号括起来\"
。我有一个记忆,在vb.net中你需要将Serializer.Serialize(MyData).Replace("'", "’")
更改为Serializer.Serialize(MyData).Replace("\", "\\").Replace("'", "’")
,因为它处理报价的方式。如果数据是一个对象,那么当你把它拿出来并且一切正常时它会自动进行json解码。如果数据只是一个字符串,则不需要进行json编码 - 只需将至少一种引号类型(单引号或双引号)更改为html实体,并在属性周围使用该引号类型。 / p>
只要您获得正确的引用,它就可以处理数据中的html:有关简单的字符串示例,请参阅http://jsfiddle.net/ctueo7sr/,对于对象示例,请参阅http://jsfiddle.net/aLaLnhp2/1/