Programing

PHP 문자열을 JavaScript 변수에 전달하고 줄 바꿈을 피하십시오.

lottogame 2020. 2. 27. 22:06
반응형

PHP 문자열을 JavaScript 변수에 전달하고 줄 바꿈을 피하십시오.


이 질문에는 이미 답변이 있습니다.

JavaScript 변수로 출력하기 위해 PHP 문자열을 인코딩하는 가장 쉬운 방법은 무엇입니까?

따옴표와 줄 바꿈이 포함 된 PHP 문자열이 있습니다. 이 문자열의 내용을 JavaScript 변수에 넣어야합니다.

일반적으로, 나는 단지 JavaScript 파일을 PHP 파일로 만들었습니다.

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

그래도 실행하지 마십시오 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>

숨겨진 DIV에 삽입 한 다음 DIV의 innerHTML을 JavaScript 변수에 지정할 수 있습니다. 당신은 아무것도 탈출에 대해 걱정할 필요가 없습니다. 깨진 HTML을 넣지 마십시오.


당신은 시도 할 수 있습니다

<script type="text/javascript">
    myvar = unescape('<?=rawurlencode($myvar)?>');
</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>

참고 URL : https://stackoverflow.com/questions/168214/pass-a-php-string-to-a-javascript-variable-and-escape-newlines



반응형