编码PHP字符串以输出到JavaScript变量的最简单方法是什么?
我有一个PHP字符串,其中包括引号和换行符.我需要将此字符串的内容放入JavaScript变量中.
通常,我只是在PHP文件中构建我的JavaScript,àla:
但是,当$myVarValue
包含引号或换行符时,这不起作用.
扩展别人的答案:
使用json_encode()需要:
PHP 5.2.0或更高版本
$myVarValue
编码为UTF-8(当然还有US-ASCII)
由于UTF-8支持完整的Unicode,因此动态转换应该是安全的.
请注意,因为json_encode
转义正斜杠,即使包含的字符串也会安全地转义,以便使用脚本块进行打印.
用JSON编码
function escapeJavaScriptText($string) { return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\"))); }
我遇到过类似的问题,并了解以下是最佳解决方案:
但是,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()
可能不合适的原因是,有时,您需要阻止"
生成,例如
要么
下面的Micah解决方案为我工作,因为我必须自定义的站点不在UTF-8中,因此我无法使用json;我会投票赞成,但我的代表不够高。
function escapeJavaScriptText($string) { return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\"))); }