我正在尝试读取包含引号的JSON数据,这些数据有效地转义字符串并将后续文本视为变量。我如何防止这种情况发生?这是JSON提要(它内置在表达式引擎中,因此忽略大括号):
<?php echo substr($_SERVER["REQUEST_URI"], strpos($_SERVER["REQUEST_URI"],"=")+1, strpos($_SERVER["REQUEST_URI"],"&")-strpos($_SERVER["REQUEST_URI"],"=")-1);?>([
{exp:channel:entries channel="blog" limit="10" dynamic_start="on" disable="member_data"}
{
"title": "{exp:url_encode}{title}{/exp:url_encode}",
"body": "{blog_one_liner}",
"link": "{blog_image_link}",
"img" : "{blog_image}"
},
{/exp:channel:entries}
]);
这是在jquery中发生的解析:
function loadBlog(){
$.getJSON("http://superfad.com/work/work_json?callback=?&test=test", blogLoaded);
}
function blogLoaded(data){
for (dataIndex in data) {
var blogTitle = decodeURI(data[dataIndex].title);
var blogContent = data[dataIndex].body;
var blogLink = data[dataIndex].link;
var blogImg = data[dataIndex].img;
$("#blog_results").append('<li class="blog"><a href="' + blogLink + '" target="_blank"><img class="blog_img" src="' + blogImg + '"/></a><span class="blogtitle">'+ blogTitle + '</span> - '+ blogContent + '</li>');
};
}
你可以看到我为标题尝试在表达式引擎中编码(工作正常)并在javascript(无法正常工作)中解码。我看到JSON有某种linkify功能,但是如果不切换到JQuery的AJAX功能,我无法弄清楚如何做到这一点。我想做的是完全避免使用表达式引擎编码,并尽可能使用Javascript(如果需要,还可以使用PHP)。
答案 0 :(得分:2)
尝试使用decodeURIComponent()
代替decodeURI()
。
decodeURI用于完整的URL,而decodeURIComponent适用于任何字符串。
答案 1 :(得分:1)
你有没有试过“unescape('编码字符串')”?要解决“+”问题,您可以执行
// Create a regular expression to search all +s in the string
var lsRegExp = /\+/g;
// Return the decoded string
return unescape(String(psEncodeString).replace(lsRegExp, " "));