Dav*_*ing 375 javascript php newline escaping
编码PHP字符串以输出到JavaScript变量的最简单方法是什么?
我有一个PHP字符串,其中包括引号和换行符.我需要将此字符串的内容放入JavaScript变量中.
通常,我只是在PHP文件中构建我的JavaScript,àla:
<script>
var myvar = "<?php echo $myVarValue;?>";
</script>
Run Code Online (Sandbox Code Playgroud)
但是,当$myVarValue
包含引号或换行符时,这不起作用.
bob*_*olt 513
扩展别人的答案:
<script>
var myvar = <?php echo json_encode($myVarValue); ?>;
</script>
Run Code Online (Sandbox Code Playgroud)
使用json_encode()需要:
$myVarValue
编码为UTF-8(当然还有US-ASCII)由于UTF-8支持完整的Unicode,因此动态转换应该是安全的.
请注意,因为json_encode
转义正斜杠,即使包含的字符串</script>
也会安全地转义,以便使用脚本块进行打印.
Jav*_*ier 27
用JSON编码
mic*_*man 22
function escapeJavaScriptText($string)
{
return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\")));
}
Run Code Online (Sandbox Code Playgroud)
pr1*_*001 21
我遇到过类似的问题,并了解以下是最佳解决方案:
<script>
var myvar = decodeURIComponent("<?php echo rawurlencode($myVarValue); ?>");
</script>
Run Code Online (Sandbox Code Playgroud)
但是,micahwittman发布的链接表明存在一些较小的编码差异.PHP的rawurlencode()
功能应该符合RFC 1738,而Javascript似乎没有这样的努力decodeURIComponent()
.
gir*_*aff 11
偏执狂版本:逃避每一个角色.
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;
}
Run Code Online (Sandbox Code Playgroud)
编辑:json_encode()
可能不合适的原因是,有时,您需要阻止"
生成,例如
<div onclick="alert(???)" />
Run Code Online (Sandbox Code Playgroud)
<script>
var myVar = <?php echo json_encode($myVarValue); ?>;
</script>
Run Code Online (Sandbox Code Playgroud)
要么
<script>
var myVar = <?= json_encode($myVarValue) ?>;
</script>
Run Code Online (Sandbox Code Playgroud)
小智 5
下面的Micah解决方案为我工作,因为我必须自定义的站点不在UTF-8中,因此我无法使用json;我会投票赞成,但我的代表不够高。
function escapeJavaScriptText($string)
{
return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\")));
}
Run Code Online (Sandbox Code Playgroud)