JQuery, JSON - проблема с кавычками в данных JSON - PullRequest
0 голосов
/ 09 августа 2011

Я пытаюсь прочитать данные 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 ]

2 голосов
/ 09 августа 2011

Попробуйте использовать decodeURIComponent() вместо decodeURI().

decodeURI для полных URL, в то время как decodeURIComponent работает для любой строки.

1 голос
/ 09 августа 2011

Вы когда-нибудь пробовали "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, " ")); 

Ссылка: http://www.kamath.com/codelibrary/cl006_url.asp

...