一个始终存在的问题是, 在客户端与PHP进行PHP与JavaScript进行通信的方式会导致字符串中包含特殊字符, 这可能会使JS代码完全崩溃。例如, 看下面的代码:
<
?php $str = <
<
<
EOFTestStringEOF;
?>
<
script>
var myString = "<
?php echo $str ?>
";
<
/script>
如果此代码是由JS引擎处理的, 例如在浏览器中, 你将看到以下异常:
文章图片
确实, PHP中的字符串有多行, 并且也以相同的方式打印。需要对字符串进行转义, 即替换可能污染JavaScript的特殊字符, 以使其适合JavaScript。在本文中, 我们将向你展示使用Symfony帮助器在JavaScript上下文中安全地从PHP安全打印字符串的过程。
从PHP安全地将字符串打印到JavaScript 幸运的是, Symfony 1.4并未包含可能没人会理解的复杂方法, 而是包含了许多帮助程序, 例如DateHelper, NumberHelper, UrlHelper等。这样的助手提供了许多开发人员经常使用的方法。这些帮助程序之一就是Escaping帮助程序, 正如其名称所称, 它包含两种方法, 可用于在不同情况下转义字符串的特殊字符。要将此帮助程序包含在你的视图/操作中, 你可以简单地使用use_helper方法和该帮助程序的名称作为第一个参数, 在这种情况下, 它是转义帮助程序:
<
?php use_helper("Escaping");
?>
这将允许你在加载了帮助程序的地方使用不同的纯PHP函数。 esc_js_no_entities方法是我们需要在JavaScript上下文中安全地从PHP打印字符串的一种方法, 此方法转义字符串, 使其适合放置在JavaScript字符串中。它返回转义的值, 所以不是打印变量, 而是打印将字符串作为第一个参数传递的方法返回的值:
<
?php // Include the Escaping Helper of Symfony 1.4 ?>
<
?php use_helper("Escaping");
?>
<
?php $str = <
<
<
EOFTestStringEOF;
?>
<
script>
var myString = "<
?php echo esc_js_no_entities($str) ?>
";
<
/script>
PHP将打印以下标记:
<
script>
var myString = "Test\nString";
<
/script>
快速和功能不是吗?在转义帮助程序的方法集合中, 还有更多有用的转义方法, 例如esc_specialchars, esc_raw, 因此请不要忘记在此处查看该帮助程序的官方旧版文档。
【如何使用Symfony 1.4从JavaScript安全地从PHP打印字符串变量】编码愉快!
推荐阅读
- 如何在WinForms中使用NAudio使用C#记录声卡中的音频(系统音频)
- 如何更改NetBeans 8.2中用于Subversion的提交用户名
- 如何允许ping AWS EC2实例(无法ping EC2实例)
- 如何在SVN Tortoise中删除已保存/缓存的密码
- 如何在Symfony中使用FOSUserBundle手动将自定义字段添加到用户表
- 如何解决Virtualbox异常(在BIOS中,对于所有CPU模式(VERR_VMX_MSR_A??LL_VMX_DISABLED)均禁用了VT-x)
- CefSharp ChromeDevToolsSystemMenu在当前上下文中不存在
- react|react简单入门--常用hook中useQuery(react-query)的使用
- react|react简单入门--常用hook中useMemo的使用(详细版)