2013-06-11 2 views
2

HTML을 원시 HTML로 저장하고 있습니다. 내용을 꺼내어 다음과 같이 배열에 배치하고 있습니다. 배열은 json_encoded이지만, 큰 따옴표 나 URL이 있으면 JSON 문자열을 표시하는 자바 스크립트가 중단됩니다.JSON 문자열 용 HTML 인코딩

JSON을 통해 작동하도록 html을 인코딩 할 수 있습니까? 여기

내가이 나쁜 일이 될 수있는 이유에 예상치 못한 <

[{"html":"<a href="http:\/\/www.url.com">\n<img src="http:\/\/www.url.com\/img\/logo.png">\n<\/a>"}] 

하시기 바랍니다 더 강의 말을하지

<?php 
    $rows = array(); 
    $sql ="SELECT html FROM table"; 

    try { 
     $sth = $dbh->query($sql); 
     while($r = $sth->fetch(PDO::FETCH_OBJ)) { 
      $rows[] = $r; 
     } 
    } 
    catch(PDOException $e) { 
     echo "I'm sorry, Dave. I'm afraid I can't do that. $e"; 
    } 
    ?> 

var json = JSON.parse('<?php print json_encode(json_encode($rows)); ?>'); 

현재 출력 json으로 문자열은 자바 스크립트 오류가 발생을 사용하고 어떤의 추출물 . 이것은 내 의뢰인이 특별히 요구 한 것이며, 가능한지를 알아야합니다.

+1

왜 json_encode와 함께 fetchAll()을 사용하지 않으시겠습니까? – Robert

+0

idk가 오타 또는 실제 문제 일 때 'hmtl'열을 선택하면 'html'이 아닌가요? –

답변

2

json.parse 비즈니스가 필요하지 않습니다. JSON

var json = <?php echo json_encode($rows); ?>; 

는 당신이 필요로하는 모든 것입니다, 유효한 자바 스크립트 결국 그렇게 간단하다.

+0

당신이 말했듯이 내 질문을 업데이 트했습니다. – Somk

2

라인

var json = JSON.parse('<?php print json_encode(json_encode($rows)); ?>'); 

는 ... 결과 JSON에서 작은 따옴표에 취약하다 (그리고 다른 것들, 당신은 물건을 많이-탈출을 두 번해야 할 것이다). 그러나 당신은 그것을 필요로하지 않거나하고 싶지 않습니다.

var json = <?php print json_encode(json_encode($rows)); ?>; 

json_encode 반환 유효 JSON을하고, JSON 자바 스크립트 객체 초기화 구문의 하위 집합입니다, 그래서 위의 목적을 설명하는 유효한 자바 스크립트 코드가 발생합니다 :이 작업을 수행합니다. JavaScript 코드를 출력하는 경우 해당 행의 것으로 보이므로 문자열을 통해 간접적으로 이동할 이유가 없습니다. 그리고 당신이 발견 한 것처럼, 할 수없는 이유가 있습니다.

-1

JSON 객체를 채우기 전에 htmlentities()를 사용하여 적용 가능한 모든 문자를 HTML 엔티티로 변환 한 다음 ISO 표준을 문자 세트로 사용하는 경우 html_entity_decode()를 사용하여 출력 할 수 있습니다. 미안하지만 질문을 잘못 이해했을 수 있습니다.

+0

HTML 엔티티가 HTML 속성 값에 있지 않으면 HTML 엔티티는 JavaScript 코드와 관련이 없습니다. OP의'var json = ... '라인이 의심스럽지 않습니다. –

3

마크 B의 답변에 동의하지만이 기능의 결과로 fetchAll() 및 json_encode()를 사용할 수 있습니다. 배열 반입 대신 PDO 객체 반입을 사용하는 이유는 무엇입니까?

<?php 
$rows = array(); 
$sql ="SELECT hmtl FROM table"; 

try { 
    $sth = $dbh->query($sql); 
    $rows = $sth->fetchAll(PDO::FETCH_ASSOC); 
} 
catch(PDOException $e) { 
    echo "I'm sorry, Dave. I'm afraid I can't do that. $e"; 
} 
?> 

var json = <?= json_encode($rows); ?>; 

또한 AJAX를 통해 가져 오는 것이 좋습니다.

+2

2001 레퍼런스는 매번 +1이됩니다. – hammus