2010-02-10 4 views
0

저는 클라이언트 용 CMS를 구축하고 있습니다 (Wordpress 상단에 구축). 내 데이터베이스에서 돌아 오는 일부 데이터에 문제가 있습니다.Javascript 객체가 PHP 파값 (HTML이 있음)을 찾지 못했습니다.

기본적으로 마우스 클릭시 내 사이트의 특정 영역을 업데이트 할 수 있도록 PHP 데이터에서 Javascript 객체를 작성하고 있습니다.

예 (이 잘 작동 것) : 데이터가 내 데이터베이스에서 다시 가져올 때

<script language = "Javascript> 
    var myObject = new Object(); 

     function updateDiv(id) 
     { 
      myObject.name = '<?php echo $valueName ?>'; // $varHeadline = "Bob" 
      myObject.headline = '<?php echo $value_headline ?>'; // $varHeadline = "My Story" 

      var div = document.getElementById(id).innerHTML = myObject.name + 
      '<br>' + myObject.headline'; 
     } 
</script> 

문제가 나오면 이미 일부 HTML 또는 줄 바꿈이 있습니다.

예 :

echo $varHeadline; 
    // returns <h1>This is my headline</h1> 
    //   This is part of the value too. 

내가 그 데이터를 자바 스크립트 객체 생성 그래서 경우 :

function updateDiv(id) 
{ 
    myObject.headline = '<?php echo $varHeadline; ?>'; 
    var div = document.getElementById(id).innerHTML = myObject.headline; 
} 

내가 내 자바 스크립트에서 오류가 발생할 수 있습니다. I 은 자바 스크립트 개체 데이터로 내 div를 채우는 것을 좋아하지만 HTML이 포함 된 데이터 (또는 해당 문제에 대해 단일 따옴표 또는 큰 따옴표 포함)를 고려할 수 없습니다.

HTML 형식 (예 : <h1> 태그 등)을 유지하려는 경우 htmlspecialchars 또는 strip_tags를 사용하면 문제가되지 않습니다. Javascript를 죽이지 않고 반환 된 HTML을 저장하는 데 어려움이 있습니까? 미리 감사드립니다. -J

답변

4

로 json_encode() 문자열을 멀리 걸릴 따옴표 : 물론

myObject.headline = <?php echo json_encode($varHeadline;) ?>; 

, 당신은 같은이를 다시 작성할 수 :

<script language = "Javascript> 
    var myObject = <?php echo json_encode(array('name'=>$valueName,'headline'=>$value_headline)); ?>; 

     function updateDiv(id) 
     { 
      var div = document.getElementById(id).innerHTML = myObject.name + 
      '<br>' + myObject.headline'; 
     } 
</script> 

편집 : 아래의 코멘트에 언급 한 바와 같이, 항상 페이지에 배치하는 HTML을 신뢰할 수 있는지 확인하십시오. $ valueName 또는 $ value_headline이 사용자 입력에서 나왔다면 다른 방식으로 HTML의 유효성을 검사하지 않고 XSS 공격 등에 노출되어 있으면 좋지 않은 아이디어입니다. http://en.wikipedia.org/wiki/Cross-site_scripting

+0

$ varHeadline을 삭제하는 것을 잊지 마십시오. 그렇지 않으면 사이트의 XSS 보안 구멍에 대한 바로 가기입니다. – StasM

+0

@StasM, 좋은 지적입니다. 그의 목표는 임의의 HTML을 페이지에 넣을 수 있도록하는 것이지만, 나는 자신의 HTML 만 참조하고 있다고 가정하고있었습니다. 나는 그것을 추가 할 것이다. –

+0

실제로 HTML은 내 자신의 출처입니다. 답변 주셔서 대단히 감사합니다. –

0

" "서버 측 값이 페이지에 드롭되면 컨텍스트가 HTML이 아닌 자바 스크립트 코드 일 때 따옴표가 달라야합니다. 물론 HTML의 경우 앰퍼샌드를 "&"으로 바꾸고보다 작은 기호는 "<"등으로 처리하는 등의 작업을 수행합니다. Javascript 문자열 안쪽에,보다 작음과 앰퍼샌드는 문제가되지 않습니다. 나중에 문자열을 HTML에 채우는 것이 좋겠지 만 자바 파서 파서가 문자열을 읽는 즉시 문제는 없습니다. 인 경우 문제는 좋은 7 비트 ASCII 범위 밖에있는 따옴표와 문자입니다. (일반화되었지만 내 뜻을 알 수 있습니다.)

PHP는 모르지만 HTML/XML에 적합한 따옴표를 사용하지 말라고 지시하는 방법이 있어야합니다. Javascript 문자열 상수 내부의 특수 문자를 보호하기 위해 뭔가를하십시오.

관련 문제