暴走的感冒药 · 穿回古代做潮玩生意?后宫穿越漫画《极品狂婿》 ...· 6 月前 · |
爱搭讪的大蒜 · 华北今夜起降雪 中东部迎雨雪气温骤降_手机新浪网· 1 年前 · |
满身肌肉的皮带 · 为什么《猫和老鼠》被称为经典,而《喜羊羊与灰 ...· 1 年前 · |
魁梧的绿茶 · 江苏警官学院在全国警校中处于什么地位? - 知乎· 1 年前 · |
温柔的汽水 · 最新消息!广州这两条地铁线路,有望年底前通车 ...· 1 年前 · |
我正在努力确保用户的输入在提交到服务器之前被转换为有效的JSON字符串。
我所说的‘转换’是转义字符,如'\n‘和’.顺便说一句,我从HTML中获取用户输入。
将用户输入转换为有效的JSON字符串对我来说非常重要,因为它将以JSON格式发送到服务器并发送回客户端。(无效的JSON字符串将使整个响应无效)
如果用户输入
你好,新世界, 我的名字是“很棒”。
在HTML
<textarea>
中,
var content = $("textarea").val();
内容将包含新行字符和双引号字符.
服务器和数据库处理和存储数据不是问题。
当服务器将客户端发布的数据以JSON格式发送回他们时,我的问题就发生了。
让我通过给出服务器响应的一些例子来进一步澄清它。这是一个JSON响应,如下所示
{ "code": 0, "id": 1, "content": "USER_POSTED_CONTENT" }
如果
USER_POSTED_CONTENT
包含新行字符'\n‘、双引号或必须转义但不能转义的任何字符,那么它不再是有效的JSON字符串,客户端的JavaScript引擎无法解析数据。
因此,我试图确保客户端提交有效的JSON字符串。
这是我做了一些研究后想出来的。
String.prototype.escapeForJson = function() {
return this
.replace(/\b/g, "")
.replace(/\f/g, "")
.replace(/\\/g, "\\")
.replace(/\"/g, "\\\"")
.replace(/\t/g, "\\t")
.replace(/\r/g, "\\r")
.replace(/\n/g, "\\n")
.replace(/\u2028/g, "\\u2028")
.replace(/\u2029/g, "\\u2029");
};
我使用这个函数来转义所有需要转义的字符,以便创建一个有效的JSON字符串。
var content = txt.val().escapeForJson();
$.ajax(
data:{ "content": content }
);
但后来..。
str = JSON.stringify(str);
似乎做了同样的工作!
然而,在阅读了
JSON.stringify
的真正用途之后,我感到很困惑。它说
JSON.stringify
是将JSON对象转换成字符串。
我并不是真正地将JSON对象转换为字符串。
所以我的问题是..。使用
JSON.stringify
将用户输入转换为有效的JSON对象完全可以吗?
更新:
JSON.stringify(内容)运行良好,但它在开头和结尾都增加了双引号。为了我的需要,我不得不手动移除它。
发布于 2015-07-30 23:51:02
是的,完全没问题。您不需要重新发明已经存在的东西,您的代码将更适合其他开发人员使用。
编辑:您可能想使用object代替一个简单的字符串,因为您希望发送一些其他信息。
例如,您可能希望发送稍后将开发的另一个输入的内容。
不添加json2.js,就不应该使用stringify,目标浏览器是IE7或更小。
发布于 2015-07-31 00:07:31
我不认为JSON.stringify能做你需要的事。在处理某些案件时,请检查一下这些行为:
JSON.stringify('\n\rhello\n')
*desired : "\\n\\rhello\\n"
*actual : "\n\rhello\n"
JSON.stringify('\b\rhello\n')
*desired : "\\rhello\\n"
*actual : "\b\rhello\n"
JSON.stringify('\b\f\b\f\b\f')
*desired : ""
*actual : ""\b\f\b\f\b\f""
stringify函数返回一个有效的JSON字符串。有效的JSON字符串不需要转义这些字符。
问题是..。您只需要有效的JSON字符串吗?还是需要有效的JSON字符串和转义字符?如果前者:使用字符串,如果后者:使用字符串,然后在其之上使用您的函数。
高度相关: How to escape a JSON string containing newline characters using javascript?
发布于 2017-04-08 07:46:35
复杂。我不知道怎么说。
从函数列表中提取urlencode函数,然后稍微踢一下它。
<?php
$textdata = $_POST['textdata'];
///// Try without this one line and json encoding tanks
$textdata = urlencode($textdata);
/******* textarea data slides into JSON string because JSON is designed to hold urlencoded strings ******/
$json_string = json_encode($textdata);
//////////// decode just for kicks and used decoded for the form
$mydata = json_decode($json_string, "true");
/// url decode
$mydata = urldecode($mydata['textdata']);