2011-08-08 8 views
0

큰 따옴표가 포함 된 JSON 데이터를 읽으려고합니다. 효과적으로 문자열을 이스케이프 처리하고 이후의 텍스트를 변수처럼 처리하려고합니다. 어떻게 이런 일이 일어나지 않게해야합니까?JQuery, 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와에 일어나는 구문 분석이다 : 다음은 JSON 피드 (는 중괄호를 표현 엔진에 내장, 그래서 무시하는 것)이다

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>'); 

     }; 
    } 

당신은 내가 위해 시도 볼 수 있습니다 제목, 표현 엔진에서 인코딩 (잘 작동) 및 자바 스크립트에서 디코딩 (작동하지 않습니다). JSON에 일종의 linkify 함수가 있지만 JQuery의 AJAX 기능으로 전환하지 않고 JSON에 수행하는 방법을 알 수 없었다. 내가 무엇을하고 싶습니다 표현 엔진을 인코딩을 피하고 가능하면 자바 스크립트 (그리고 필요한 경우 PHP)로 모든 것을 할 수 있습니다.

답변

1

"unescape ('encoded string')"을 시도한 적이 있습니까? 덕분에 위와 같이 http://www.kamath.com/codelibrary/cl006_url.asp

+0

Unescape는 표현 엔진에서 공백을 나타내는 + 기호가 남아 있다는 점을 제외하고는 작동합니다. – mheavers

+0

내 대답이 업데이트되었습니다. decodeURIComponent()가있는 –

+0

은 그냥 작동합니다 ... –

2

decodeURI() 대신 decodeURIComponent()으로 시도하십시오.

decodeURI는 완전한 URL을위한 반면 decodeURIComponent는 모든 문자열에서 작동합니다.

+0

했다 동일한 문제가 있지만, 예, decodeURIComponent 작품 : '+'문제를 해결하려면, 당신은

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

참조 할 수 있습니다. – mheavers