JQuery,JSON - JSON数据中的引号问题

时间:2011-08-08 21:00:24

标签: jquery json character-encoding expressionengine

我正在尝试读取包含引号的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)。

2 个答案:

答案 0 :(得分:2)

尝试使用decodeURIComponent()代替decodeURI()

decodeURI用于完整的URL,而decodeURIComponent适用于任何字符串。

答案 1 :(得分:1)

你有没有试过“unes​​cape('编码字符串')”?要解决“+”问题,您可以执行

// Create a regular expression to search all +s in the string
var lsRegExp = /\+/g;
// Return the decoded string
return unescape(String(psEncodeString).replace(lsRegExp, " ")); 

参考:http://www.kamath.com/codelibrary/cl006_url.asp