source

JavaScript 변수에 PHP 문자열 전달(및 줄바꿈 이스케이프)

itover 2022. 12. 1. 21:29
반응형

JavaScript 변수에 PHP 문자열 전달(및 줄바꿈 이스케이프)

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

따옴표와 줄바꿈이 포함된 PHP 문자열이 있습니다.이 문자열의 내용을 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 이후
  • $myVarValueUTF-8(US-ASCII)

UTF-8은 완전한 Unicode를 지원하므로 즉시 변환하는 것이 안전합니다.

해 주세요.왜냐하면 '이거'니까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>

단, mikawittman이 게시한 링크는 약간의 부호화 차이가 있음을 나타냅니다.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>

Mika의 아래 솔루션은 제가 커스터마이즈해야 하는 사이트가 UTF-8에 없기 때문에 json을 사용할 수 없었습니다.저는 투표하고 싶지만 제 평판이 충분하지 않습니다.

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

을 실행하지 addslashes()페이지의 경우 파서를 볼 수 </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에 삽입한 다음 이너를 할당할 수 있습니다.JavaScript 변수에 대한 DIV의 HTML.도망칠 걱정은 하지 않아도 돼요.고장난 HTML을 넣지 않도록 하세요.

시도해 보세요.

<script type="text/javascript">
    myvar = unescape('<?=rawurlencode($myvar)?>');
</script>
  1. 하지 마, 에이잭스를 써서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 문자 엔티티를 번역해야 할 경우 대신 htmlentity()를 사용합니다.

이 기능은 메시지 보드나 방명록 응용 프로그램 등에서 사용자가 제공한 텍스트에 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>

또한 문서를 통해 JS var를 정의하는 것은 간단한 문제입니다.getElementBy아이디:

<script type="text/javascript" charset="UTF-8">
    var moonUnitAlpha = document.getElementById('phpString1').value;
</script>

이제 JS 변수 "moonUnitAlpha"를 사용하여 PHP 문자열 값을 가져올 수 있습니다.이건 우리에게 정말 효과가 있는 것 같아.오래 쓸 수 있는지 알아볼게요.

템플릿 엔진을 사용하여 HTML을 구축하면 원하는 것을 모두 채울 수 있습니다!

XTemplates를 확인하십시오.훌륭한 오픈 소스 경량 템플릿 엔진입니다.

HTML/J는 다음과 같습니다.

<script>
    var myvar = {$MyVarValue};
</script>

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

반응형