PHP 문자열을 JavaScript 변수로 전달하고 (및 Escape Newlines) [복제
-
03-07-2019 - |
문제
이 질문은 이미 여기에 답이 있습니다.
JavaScript 변수로 출력을 위해 PHP 문자열을 인코딩하는 가장 쉬운 방법은 무엇입니까?
인용문과 신약을 포함하는 PHP 문자열이 있습니다. 이 문자열의 내용을 JavaScript 변수에 넣어야합니다.
일반적으로 PHP 파일로 JavaScript를 구성합니다.
<script>
var myvar = "<?php echo $myVarValue;?>";
</script>
그러나 이것은 작동하지 않습니다 $myVarValue
인용문 또는 신성경이 포함되어 있습니다.
해결책
다른 사람의 답변 확장 :
<script>
var myvar = <?php echo json_encode($myVarValue); ?>;
</script>
사용 json_encode () 필수 :
- PHP 5.2.0 이상
$myVarValue
UTF-8 (또는 US-ASCII)로 인코딩
UTF-8은 전체 유니 코드를 지원하므로 즉시 변환하는 것이 안전해야합니다.
이에 주목하십시오 json_encode
앞으로 슬래시, 심지어 포함 된 문자열도 탈출합니다 </script>
스크립트 블록으로 인쇄하기 위해 안전하게 탈출합니다.
다른 팁
JSON으로 인코딩하십시오
function escapeJavaScriptText($string)
{
return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\")));
}
편집증 버전 : 모든 단일 캐릭터를 탈출합니다.
function javascript_escape($str) {
$new_str = '';
$str_len = strlen($str);
for($i = 0; $i < $str_len; $i++) {
$new_str .= '\\x' . sprintf('%02x', ord(substr($str, $i, 1)));
}
return $new_str;
}
편집하다: 이유 이유 json_encode()
적절하지 않을 수도 있습니다. 때로는 예방해야한다는 것입니다. "
생성됩니다
<div onclick="alert(???)" />
<script>
var myVar = <?php echo json_encode($myVarValue); ?>;
</script>
또는
<script>
var myVar = <?= json_encode($myVarValue) ?>;
</script>
아래의 Micah의 솔루션은 내가 사용자 정의해야 할 사이트가 UTF-8에 있지 않기 때문에 저를 위해 작동 했으므로 JSON을 사용할 수 없었습니다. 나는 그것을 투표하지만 내 담당자는 충분히 높지 않습니다.
function escapeJavaScriptText($string)
{
return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\")));
}
숨겨진 div에 삽입 한 다음 div의 내부 html을 JavaScript 변수에 할당 할 수 있습니다. 탈출하는 것에 대해 걱정할 필요가 없습니다. 깨진 HTML을 거기에 넣지 마십시오.
당신은 시도 할 수 있습니다
<script type="text/javascript">
myvar = unescape('<?=rawurlencode($myvar)?>');
</script>
그래도 실행하지 마십시오 addslashes()
; HTML 페이지의 맥락에 있다면 HTML 파서는 여전히 </script>
태그, 심지어 미드 스트링, 그것이 JavaScript의 끝이라고 가정합니다.
<?php
$value = 'XXX</script><script>alert(document.cookie);</script>';
?>
<script type="text/javascript">
var foo = <?= json_encode($value) ?>; // Use this
var foo = '<?= addslashes($value) ?>'; // Avoid, allows XSS!
</script>
하지 않다. Ajax를 사용하여 넣으십시오
data-*
HTML의 속성 또는 다른 의미있는 것. 인라인 스크립트를 사용하면 페이지가 커집니다 불안하거나 여전히 사용자가 레이아웃을 망칠 수 있습니다., 하지 않는 한…… 당신은 더 안전한 기능을합니다.
function inline_json_encode($obj) { return str_replace('<!--', '<\!--', json_encode($obj)); }
htmlspecialchars
설명
string htmlspecialchars ( string $string [, int $quote_style [, string $charset [, bool $double_encode ]]] )
특정 문자는 HTML에서 특별한 의미를 지니고 있으며, 그 의미를 보존하려면 HTML 엔티티가 표현해야합니다. 이 함수는 이러한 변환 중 일부와 함께 문자열을 반환합니다. 번역은 일상적인 웹 프로그래밍에 가장 유용한 번역입니다. 모든 HTML 문자 엔티티를 번역 해야하는 경우 대신 htmlentities ()를 사용하십시오.
이 기능은 메시지 보드 또는 방명록 응용 프로그램과 같은 HTML 마크 업을 포함하는 것을 방지하는 데 유용합니다.
수행 된 번역은 다음과 같습니다.
* '&' (ampersand) becomes '&'
* '"' (double quote) becomes '"' when ENT_NOQUOTES is not set.
* ''' (single quote) becomes ''' only when ENT_QUOTES is set.
* '<' (less than) becomes '<'
* '>' (greater than) becomes '>'
이것이 나쁜 연습인지 아니오인지 확실하지 않지만 우리 팀과 나는 혼합 HTML, JS 및 PHP 솔루션을 사용하고 있습니다. 우리는 JS 변수로 가져 가려는 PHP 문자열로 시작합니다.
$someString
다음으로 내면에 숨겨진 양식 요소를 사용하고 값을 문자열로 설정합니다.
<form id="pagePhpVars" method="post">
<input type="hidden" name="phpString1" id="phpString1" value="'.$someString.'" />
</form>
그런 다음 Document.getElementById를 통해 JS var를 정의하는 간단한 문제 :
<script type="text/javascript" charset="UTF-8">
var moonUnitAlpha = document.getElementById('phpString1').value;
</script>
이제 PHP 문자열 값을 잡으려는 JS 변수 "MoonUnitalpha"를 어디서나 사용할 수 있습니다. 이것은 우리에게 정말 잘 작동하는 것 같습니다. 우리는 그것이 많은 용도로 유지되는지 볼 것입니다.
템플릿 엔진을 사용하여 HTML을 구성하는 경우 원하는 것을 채울 수 있습니다!
체크 아웃 xtemplates. 멋지고 오픈 소스, 가벼운 템플릿 엔진입니다.
HTML/JS가 다음과 같습니다.
<script>
var myvar = {$MyVarValue};
</script>