복붙노트

자바 스크립트 변수에 PHP 문자열 전달 (그리고 개행 문자 이스케이프) [duplicate]

PHP

자바 스크립트 변수에 PHP 문자열 전달 (그리고 개행 문자 이스케이프) [duplicate]

자바 스크립트 변수에 출력하기 위해 PHP 문자열을 인코딩하는 가장 쉬운 방법은 무엇입니까?

따옴표와 개행 문자가 포함 된 PHP 문자열이 있습니다. JavaScript 변수에 넣으려면이 문자열의 내용이 필요합니다.

일반적으로 PHP 파일로 자바 스크립트를 구성합니다.

<script>
  var myvar = "<?php echo $myVarValue;?>";
</script>

그러나 $ myVarValue에 따옴표 또는 줄 바꿈이 포함되어 있으면이 방법이 작동하지 않습니다.

해결법

  1. ==============================

    1.

    다른 사람의 답변으로 확대 :

    <script>
      var myvar = <?php echo json_encode($myVarValue); ?>;
    </script>
    

    json_encode ()를 사용하려면 다음이 필요합니다.

    UTF-8은 완전한 유니 코드를 지원하므로 즉시 변환해야합니다.

    json_encode는 슬래시를 이스케이프하므로 가 포함 된 문자열조차도 스크립트 블록을 사용하여 인쇄 할 때 안전하게 이스케이프 처리됩니다.

  2. ==============================

    2.

    JSON으로 인코딩

  3. ==============================

    3.

    function escapeJavaScriptText($string)
    {
        return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\")));
    }
    
  4. ==============================

    4.

    나는 비슷한 문제가 있었고 다음이 최선의 해결책이라는 것을 알고 있습니다.

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

    그러나 micahwittman이 게시 한 링크에는 약간의 인코딩 차이가 있음이 제시되어 있습니다. PHP의 rawurlencode () 함수는 RFC 1738을 준수해야하지만 Javascript의 decodeURIComponent ()에서는 이와 같은 노력이 없었습니다.

  5. ==============================

    5.

    편집증 버전 : 모든 단일 문자를 이스케이프 처리합니다.

    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(???)" />
    
  6. ==============================

    6.

    <script>
    var myVar = <?php echo json_encode($myVarValue); ?>;
    </script>
    

    또는

    <script>
    var myVar = <?= json_encode($myVarValue) ?>;
    </script>
    
  7. ==============================

    7.

    커스터마이징해야하는 사이트가 UTF-8이 아니기 때문에 아래의 Micah 솔루션이 저에게 효과적이었습니다. 그래서 json을 사용할 수 없었습니다. 나는 그것을 투표 할 것이지만 내 담당자는 충분히 높지 않다.

    function escapeJavaScriptText($string) 
    { 
        return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\"))); 
    } 
    
  8. ==============================

    8.

    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

  9. ==============================

    9.

    숨겨진 DIV에 삽입 한 다음 DIV의 innerHTML을 자바 스크립트 변수에 할당 할 수 있습니다. 아무 것도 피할 걱정할 필요가 없습니다. 거기에 깨진 HTML을 넣지 않도록하십시오.

  10. ==============================

    10.

    시도해 볼 수 있습니다.

    <script type="text/javascript">
        myvar = unescape('<?=rawurlencode($myvar)?>');
    </script>
    
  11. ==============================

    11.

    addslashes ()를 사용하여 실행하지 마십시오. HTML 페이지의 컨텍스트에서 HTML 파서는 여전히 중간 문자열 인 태그를 볼 수 있으며 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>
    
  12. ==============================

    12.

  13. ==============================

    13.

    이것이 나쁜 연습인지 아닌지는 잘 모르겠지만 팀과 저는 혼합 된 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>
    

    이제 JS 변수 "moonUnitAlpha"를 사용하여 PHP 문자열 값을 가져올 수 있습니다. 이것은 우리를 위해 정말 잘 작동하는 것 같습니다. 우리는 그것이 무거운 사용까지 붙드는 지 볼 것입니다.

  14. ==============================

    14.

    템플릿 엔진을 사용하여 HTML을 구성하면 원하는 내용으로 채울 수 있습니다!

    X 템플릿을 확인하십시오. 가볍고 오픈 소스 인 멋진 템플릿 엔진입니다.

    HTML / JS가 다음과 같이 보일 것입니다.

    <script>
        var myvar = {$MyVarValue};
    </script>
    
  15. from https://stackoverflow.com/questions/168214/pass-a-php-string-to-a-javascript-variable-and-escape-newlines by cc-by-sa and MIT lisence