2010-11-28 2 views
3

사용자가 CKEditor를 사용하여 웹 페이지를 편집 한 다음 수정 된 HTML 코드 조각을 서버에 저장하여 후속 페이지 전달시이를 표시 할 수있게했습니다. jQuery를 사용하여 PHP에 html 코드 게시

var datatosend = JSON.stringify({ page: 1, block: 22, content: editor1.getData() }); 

$.ajax({ 
    url: "/ajax/fragment/", 
    type: "POST", 
    dataType: 'json',      
    data: "data=" + datatosend, 
    success: function (html) { }, 
    error: function (xhr, status, msg) { 
    alert(status + " " + msg); 
    } 
});  

내가 PHP를 사용하고있는 서버 측

이 일을하고있다 :

$json = stripslashes($_POST[ "data" ]); 
    $values = json_decode($json, true);  

본인은 HTML과 서버에 몇 ID를 보내려면이 코드를 사용하고 있습니다 이것은 HTML이 아닌 스 니펫을 보내지 만 콘텐츠에서 다음과 같은 내용이 전송되면 작동하지 않는 경우가 많습니다.

<img alt="" src="http://one.localbiz.net/uploads/1/Dido-3_2.JPG" style="width: 173px; height: 130px;" /> 

데이터 클라이언트 측을 인코딩 한 다음 서버 측을 디코딩한다는 측면에서 내가 무엇을해야하는지 잘 모르겠습니까? 또한 확실하지 않은 경우 dataType : 'json'이 여기에서 사용하는 것이 가장 좋습니다.

+1

왜 json 디코딩 전에 스트립을 어떻게하고 있습니까? –

답변

3

dataType 속성은 서버 측 스크립트의 예상 리턴 데이터 유형입니다. JSON.stringify 호출을 사용하고 있기 때문에 클라이언트 측에서 JSON 객체의 직렬화를 허용하는 json2.js 스크립트 또는 유사한 스크립트를 사용한다고 가정합니다.

editor1.getData() 호출에서 JavaScript escape() 함수를 사용하여 문제가있는 문자를 올바르게 이스케이프 처리 할 수 ​​있습니다.

다음 테스트를 사용했고 PHP 프로그램은 이스케이프 기능에 전달 된 문자열 리터럴의 정확한 복사본을 반환했습니다.

so.html *

<!DOCTYPE html> 
<html><head><title>SO Example</title> 
<script 
    type="text/javascript" 
    src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js"> 
</script> 
</head> 
<body> 

<script type="text/javascript"> 
    var $data = 'd=' + escape(
    '<img alt="" src="http://one.localbiz.net/uploads/1/Dido-3_2.JPG" style="width: 173px; height: 130px;" />' 
); 

    $.ajax({ 
    url:"/so.php", 
    type:"post", 
    dataType:"html", 
    data:$data, 
    success:function(obj){ 
     alert(obj); 
    } 
    }); 
</script> 
</body> 
</html> 

so.php *

<?php 
    echo $_POST['d']; 
+0

고맙습니다. escape() 또는 encodeURIComponent()를 사용할시기에 대한 정보가 있습니까? 그리고 PHP를 사용할 때 어떻게해야할까요? 웹상에서 많은 의견이 많은 것으로 보이며 escape() 함수는 PHP에서 후속 변환이 필요한 업로드 된 문자를 변환 할 것입니다. –

+0

나는 그것이 클라이언트 측에서 제출되는 것을 기반으로 케이스별로 결정될 것이라고 생각합니다.함수 escape(), encodeURI() 및 encodeURIComponent()는 모두 문자 변환의 서로 다른 중첩 된 하위 집합을 포함합니다. 나는 wiki markup/markdown이 클라이언트 측/브라우저 편집에서 일반적으로 사용되는 이유는 그것이 일반적으로 특수 문자의 광기가 덜하기 때문이라고 생각합니다. 이 링크에는 http://xkr.us/articles/javascript/encode-compare/와 같은 다양한 옵션에 대한 훌륭한 논문이 있습니다. – JTP

2

PHP 호출을 stripslashes()에 놓는 것이 좋습니다. 당신은 정말로 그것을 필요로하지 않아야합니다. img 요소로 무엇이 파괴되는지 설명 할 수 있다면 도움이 될 것입니다.

"dataType : 'json'이 여기에서 사용하는 것이 가장 좋은지 확실하지 않은 경우"괜찮을 것이라고 말하고 싶습니다. 그것은 직렬화를 올바르게 처리하고 단일 값만 게시하면됩니다.

1

나는이 같은 정확한 시나리오를 가지고,하지만 난 YAHOO.lang.JSON을 사용하고 있습니다. string31 (html) http://developer.yahoo.com/yui/json/, PHP json_decode (json) 및 서버 측에서부터 html을 가질 수 있습니다 (예 : @ @ $ % ^).*() + {} : "<?") 데이터베이스에 정확하게 저장하고 html을 저장하기 위해 순서를 반대로 간단하게 데이터베이스에서 검색합니다. 나는 이것이 YUI의 힘이 무엇인지, 또는 무엇이 효과가 있는지는 모르겠지만, 그것이 작동하는지 ... 나는 그것이 작동하지 않을 html의 특별한 세트가 있는지 확실하지 않다. 그러나 나는 그렇지 않다. 아직 우연히 만나지 마라.

관련 문제