문제

이 질문은 이미 여기에 답이 있습니다.

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'\\")));
}

비슷한 문제가 있었고 다음이 최상의 솔루션이라는 것을 이해합니다.

<script>
    var myvar = decodeURIComponent("<?php echo rawurlencode($myVarValue); ?>");
</script>

그러나, 그 링크 Micahwittman이 게시 한 것은 약간의 인코딩 차이가 있음을 시사합니다. PHP rawurlencode() 기능은 준수해야합니다 RFC 1738, JavaScript의 노력은 없었지만 decodeURIComponent().

편집증 버전 : 모든 단일 캐릭터를 탈출합니다.

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>
  1. 하지 않다. Ajax를 사용하여 넣으십시오 data-* HTML의 속성 또는 다른 의미있는 것. 인라인 스크립트를 사용하면 페이지가 커집니다 불안하거나 여전히 사용자가 레이아웃을 망칠 수 있습니다., 하지 않는 한…

  2. … 당신은 더 안전한 기능을합니다.

    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 '&amp;'
* '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.
* ''' (single quote) becomes '&#039;' only when ENT_QUOTES is set.
* '<' (less than) becomes '&lt;'
* '>' (greater than) becomes '&gt;'

http://ca.php.net/htmlspecialchars

이것이 나쁜 연습인지 아니오인지 확실하지 않지만 우리 팀과 나는 혼합 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>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top