자바 스크립트 변수에 PHP 문자열 전달 (그리고 개행 문자 이스케이프) [duplicate]
PHP자바 스크립트 변수에 PHP 문자열 전달 (그리고 개행 문자 이스케이프) [duplicate]
자바 스크립트 변수에 출력하기 위해 PHP 문자열을 인코딩하는 가장 쉬운 방법은 무엇입니까?
따옴표와 개행 문자가 포함 된 PHP 문자열이 있습니다. JavaScript 변수에 넣으려면이 문자열의 내용이 필요합니다.
일반적으로 PHP 파일로 자바 스크립트를 구성합니다.
<script>
var myvar = "<?php echo $myVarValue;?>";
</script>
그러나 $ myVarValue에 따옴표 또는 줄 바꿈이 포함되어 있으면이 방법이 작동하지 않습니다.
해결법
-
==============================
1.
다른 사람의 답변으로 확대 :
<script> var myvar = <?php echo json_encode($myVarValue); ?>; </script>
json_encode ()를 사용하려면 다음이 필요합니다.
UTF-8은 완전한 유니 코드를 지원하므로 즉시 변환해야합니다.
json_encode는 슬래시를 이스케이프하므로 script>가 포함 된 문자열조차도 스크립트 블록을 사용하여 인쇄 할 때 안전하게 이스케이프 처리됩니다.
-
==============================
2.
JSON으로 인코딩
-
==============================
3.
function escapeJavaScriptText($string) { return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\"))); }
-
==============================
4.
나는 비슷한 문제가 있었고 다음이 최선의 해결책이라는 것을 알고 있습니다.
<script> var myvar = decodeURIComponent("<?php echo rawurlencode($myVarValue); ?>"); </script>
그러나 micahwittman이 게시 한 링크에는 약간의 인코딩 차이가 있음이 제시되어 있습니다. PHP의 rawurlencode () 함수는 RFC 1738을 준수해야하지만 Javascript의 decodeURIComponent ()에서는 이와 같은 노력이 없었습니다.
-
==============================
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.
<script> var myVar = <?php echo json_encode($myVarValue); ?>; </script>
또는
<script> var myVar = <?= json_encode($myVarValue) ?>; </script>
-
==============================
7.
커스터마이징해야하는 사이트가 UTF-8이 아니기 때문에 아래의 Micah 솔루션이 저에게 효과적이었습니다. 그래서 json을 사용할 수 없었습니다. 나는 그것을 투표 할 것이지만 내 담당자는 충분히 높지 않다.
function escapeJavaScriptText($string) { return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\"))); }
-
==============================
8.
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 '>'
http://ca.php.net/htmlspecialchars
-
==============================
9.
숨겨진 DIV에 삽입 한 다음 DIV의 innerHTML을 자바 스크립트 변수에 할당 할 수 있습니다. 아무 것도 피할 걱정할 필요가 없습니다. 거기에 깨진 HTML을 넣지 않도록하십시오.
-
==============================
10.
시도해 볼 수 있습니다.
<script type="text/javascript"> myvar = unescape('<?=rawurlencode($myvar)?>'); </script>
-
==============================
11.
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>
-
==============================
12.
-
==============================
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.
템플릿 엔진을 사용하여 HTML을 구성하면 원하는 내용으로 채울 수 있습니다!
X 템플릿을 확인하십시오. 가볍고 오픈 소스 인 멋진 템플릿 엔진입니다.
HTML / JS가 다음과 같이 보일 것입니다.
<script> var myvar = {$MyVarValue}; </script>
from https://stackoverflow.com/questions/168214/pass-a-php-string-to-a-javascript-variable-and-escape-newlines by cc-by-sa and MIT lisence
'PHP' 카테고리의 다른 글
HTML / PHP로 XSS를 방지하는 방법? (0) | 2018.09.02 |
---|---|
PHP를 사용하여 이메일을 보내는 방법은 무엇입니까? (0) | 2018.09.01 |
MySQL에 '존재하지 않으면 삽입'하는 방법? (0) | 2018.09.01 |
PHP에서 클라이언트 IP 주소를 얻는 방법? (0) | 2018.09.01 |
PHP로 HTML + CSS를 PDF로 변환 하시겠습니까? [닫은] (0) | 2018.09.01 |