2011-03-22 4 views
2

PHP에서 할당 한 자바 스크립트에 값을 지정하려고 시도하고 출력 할 document.write()를 사용하고 있습니다. 문제는 내가 이렇게 할 때, 완전한 빈 화면이 나타나지만 아무런 오류도 발생하지 않는다는 것입니다. 하지만 PHP를 꺼내 'ABC'와 같은 값을 넣으면 작동합니다. 내 코드의 예는 다음과 같습니다.자바와 PHP를 섞는 데 문제가 있습니다.

var comment_text="<?php echo $value['comment_text'];?>"; 
var bodyelement = document.getElementsByTagName('body')[0]; 
     var newdiv = document.createElement('div'); 
newdiv.style.textAlign = 'center'; 
      newdiv.style.zIndex = 10001; 
      newdiv.style.left = (<?php echo $comment_x;?>+getPos('browserwindow',"Left")-23) + 'px'; 
      newdiv.style.top = (<?php echo $comment_y;?>+getPos('browserwindow',"Top")-90) + 'px'; 
      newdiv.style.position = 'absolute'; 
newdiv.innerHTML = comment_text; 
     bodyelement.appendChild(newdiv); 

나는 PHP 오류 로그를 가지고 있으며 오류도 발생하지 않습니다. 값은 데이터베이스에서 검색되고 probem은 결과를 출력합니다. ** 좋아 UPDATE, 내가 전에이 문제를 가지고 있었다.

은 기본적으로 줄 바꿈은 다음과 같이 작성됩니다

var comment_text="cool Beans 

"; 내가 문자열을 줄 바꿈 대체 제거하기 위해 시도했지만 왜하는 새로운 라인 등이 작동하지 않는 것

.을 이 오류가 발생할?

+1

출처를 보았습니까? PHP가 올바르게 출력 되었습니까? –

+0

Apache 로그에서 오류를 확인하십시오. 빈 화면이 나타나면 PHP 오류가 로그에 표시 될 수 있습니다. –

+1

출력 내용 -> $ commnent_x, $ comment_y 및 $ value [ 'comment_text']가 표시됩니까? – bensiu

답변

1

사용

var comment_text=String(<?php echo json_encode($value['comment_text']);?>); 

대신

var comment_text="<?php echo $value['comment_text'];?>"; 

의이 백 슬래시, 따옴표 또는 라인 피드와 같은 모든 특수 문자를 이스케이프 크로스 사이트 스크립팅 공격으로부터 사용자를 보호 할 것입니다.

String(...)String 유형을 가지며 숫자로 해석되지 않습니다 ($value['comment_text']에 숫자 형식이있는 경우).

3

문제는 PHP의 출력에 클리 어리입니다. 당신이 빈 페이지를 얻을 경우, 당신이 가장 가능성이 말했다 페이지의 처리를 중지하는 PHP의 문제를 의미합니다.

뷰어로 보내기 전에 PHP가 구문 분석되므로 빈/오류 페이지가 표시됩니다.

$value['comment_text']ABC으로 바꾸면 오류의 원인이되는 위치가 제거됩니다.

$value['comment_text']은 함수의 결과이거나 데이터베이스 쿼리 일 뿐이므로 $value['comment_text']을 먼저 출력 한 다음 JS (PHP 코드가 작동하면 작동 함)에 고정하는 것에 대해 걱정하십시오.

PHP 코드가 보이지 않기 때문에 더 이상 당신을 도울 수 없습니다.

+0

값이 데이터베이스에서 검색됩니다. print_r ($ value)과 모든 결과를 출력했기 때문에 값을 가져옵니다. 그래서 정보가 있습니다. –

+0

은'array()'형식 또는'object'에있는 데이터베이스 결과입니까? – Jakub

+0

@Devin Dixon, comment_text에서 따옴표를 이스케이프해야합니다 :''. – Czechnology

0

PHP가 오류를 일으키는 경우는이 솔루션은 단지 트림을 사용하던 문제

error_reporting(E_ALL) 
0

를 확인하려면 오류보고를 켤 수 있습니다 (그것이 같은 소리).

echo trim ($ value [ 'comment_text']);

+1

어떻게이 솔루션입니까? 실제로 그것을 깨뜨린 이유는 무엇입니까? 댓글에 공백이 있습니까? 또는 개행 방법? – Jakub

+0

명백한 부분은 때때로 작동하지만 다른 부분은 작동하지 않는 솔루션입니다. json_encode는 100 % 시간 동안 작동합니다. –

0

js에서 % s의 자바 스크립트 코드에 heredoc을 사용하는 것이 좋습니다. sprintf를 사용하여 변수를 대체하십시오.

관련 문제