将PHP字符串编码输出到JavaScript变量的最简单方法是什么?
我有一个PHP字符串,其中包括引号和换行。我需要将这个字符串的内容放入一个JavaScript变量中。
通常,我只会在一个PHP文件中构造我的JavaScript, à la:
<script>
var myvar = "<?php echo $myVarValue;?>";
</script>
但是,当$myVarValue包含引号或换行符时,这就不起作用了。
将PHP字符串编码输出到JavaScript变量的最简单方法是什么?
我有一个PHP字符串,其中包括引号和换行。我需要将这个字符串的内容放入一个JavaScript变量中。
通常,我只会在一个PHP文件中构造我的JavaScript, à la:
<script>
var myvar = "<?php echo $myVarValue;?>";
</script>
但是,当$myVarValue包含引号或换行符时,这就不起作用了。
当前回答
Micah的解决方案如下工作为我的网站,我必须自定义不是在UTF-8,所以我不能使用json;我也想投票,但我的声望不够高。
function escapeJavaScriptText($string)
{
return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\")));
}
其他回答
扩展别人的回答:
<script>
var myvar = <?php echo json_encode($myVarValue); ?>;
</script>
使用json_encode()需要:
PHP 5.2.0或更高版本 $myVarValue编码为UTF-8(当然也可以是US-ASCII)
由于UTF-8支持完整的Unicode,因此动态转换应该是安全的。
注意,因为json_encode转义正斜杠,即使包含</script>的字符串也会被安全转义,以便使用脚本块打印。
function escapeJavaScriptText($string)
{
return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\")));
}
偏执版本:逃避每一个角色。
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 type="text/javascript">
myvar = unescape('<?=rawurlencode($myvar)?>');
</script>
用JSON编码