2010-05-28 4 views

답변

2

당신이

그런데 '

<a onclick="run('<?php echo htmlentities($str) ?>')">test</a> 

을에서 에코 문을 넣어 인용하지 않고 문자열의 내용을 출력하는, = '

+0

또한 wamp의 예에서 닫는 괄호가 누락되었습니다. – DisgruntledGoat

+0

아마도 생성 코드가 오타 일뿐입니다. –

2

$str&#039;, 전에로 entity 인코딩 된 상태 :

'Hi, Tim! I&#039;ve got two', ' 

은 분명히 유효한 JavaScript 문자열 리터럴이 아닙니다. 아포스트로피는 HTML로 인코딩되어 있습니다. 아직 끝나서는 안되며, 말도 안되는 말도 있습니다.

json_encode 함수를 사용하여 JavaScript 문자열 (및 기타) 리터럴을 만들어야합니다. 당신은 rawstr $ 한 경우 :

Hi, Tim! I've got two 

다음 json_encode 당신에게 올바른 자바 스크립트 문자열을 줄 것이다 :

<a onclick="run(<?php echo htmlspecialchars(json_encode($rawstr)) ?>); return false;">test</a> 

:

'Hi, Tim! I\'ve got two' 

그래서 당신은 HTML 이벤트 핸들러 속성에 삽입 할 수 있습니다 노트 htmlspecialchars()htmlentities()보다 바람직합니다. 보통 후자는 HTML을 제외한 모든 비 ASCII 문자를 이스케이프 처리하므로, 올바른 charset을 지정하십시오.

PHP 5.3에서

, 당신은 HTML 특수 문자가 당신에게 인코딩 단계 절약 할 수 json_encode의 출력에 결코 없다는 것을 보장하기 위해 JSON_HEX_ 플래그를 사용할 수 있습니다

<a onclick="run(<?php echo json_encode($rawstr, JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT) ?>); return false;">test</a> 

, 여러분의 인생을 더 쉽게 만드는을, 캡슐화 이러한 일반적인 출력과 이스케이프 더 간단하게 이름의 함수로 방법 :

function h($s) { 
    echo htmlspecialchars($s, ENT_QUOTES); 
} 
function j($s) { 
    echo json_encode($s, JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT|JSON_HEX_APOS); 
} 
function u($s) { 
    echo urlencode($s); 
} 

<a onclick="run(<?php j($rawstr); ?>); return false;">test</a> 

그리고 더 나은 속성에서 모든 스크립트에서 결합함으로써 인라인 이벤트 핸들러를 사용하지 마십시오 :

<a id="test">test</a> 
... 
<script type="text/javascript"> 
    document.getElementById('test').onclick= function() { 
     run(<?php j($rawstr); ?>); 
     return false; 
    }; 
</script> 
관련 문제