<a onclick="run('Hi, Tim! I&#039;ve got two', '">test</a>
onclick
이벤트가 전혀 실행되지 않습니다.이런 종류의 문제에 대한 해결책은 무엇입니까?
<a onclick="run(<?php echo htmlentities($str) ?>)">test</a>
어떻게 그것을 해결하기 위해 :
위는이 같은 의해 생성된다?
<a onclick="run('Hi, Tim! I&#039;ve got two', '">test</a>
onclick
이벤트가 전혀 실행되지 않습니다.이런 종류의 문제에 대한 해결책은 무엇입니까?
<a onclick="run(<?php echo htmlentities($str) ?>)">test</a>
어떻게 그것을 해결하기 위해 :
위는이 같은 의해 생성된다?
당신이
그런데 '
<a onclick="run('<?php echo htmlentities($str) ?>')">test</a>
을에서 에코 문을 넣어 인용하지 않고 문자열의 내용을 출력하는, = '
$str
'
, 전에로 entity 인코딩 된 상태 :
'Hi, Tim! I'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을 지정하십시오.
, 당신은 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>
또한 wamp의 예에서 닫는 괄호가 누락되었습니다. – DisgruntledGoat
아마도 생성 코드가 오타 일뿐입니다. –