转义JavaScript代码段在WordPress中的PHP函数内部

时间:2015-02-24 16:43:35

标签: javascript php wordpress escaping

基于WordPress的网站的一个php文件中的一个函数被切断,我认为由于转义多个引号和斜杠时出错。

以下是有问题的代码行:

echo '<script>window.jQuery || document.write(\'<script src="' . get_template_directory_uri() . '/assets/js/vendor/jquery-1.11.0.min.js"><\/script>\')</script>' . "\n";

它生成以下html:

<script>window.jQuery || document.write('

'之后的其他所有内容都未显示且未执行。

作为临时解决方案,我将结束<!-- my hack --> </script>标记直接插入到html页面。

这导致了以下html输出:

<script>window.jQuery || document.write('<script type='text/javascript' src='/wp-content/themes/my-theme/assets/js/vendor/modernizr-2.7.0.min.js'></script><!-- my hack --></script>

没有看到任何错误,有人可以帮忙吗?这是整个功能:

function roots_jquery_local_fallback($src, $handle = null) {
  static $add_jquery_fallback = false;
  if ($add_jquery_fallback) {

    echo '<script>window.jQuery || document.write(\'<script src="' . get_template_directory_uri() . '/assets/vendor/jquery/dist/jquery.min.js?1.11.1"><\/script>\')</script>' . "\n";

    $add_jquery_fallback = false;
  }
  if ($handle === 'jquery') {
    $add_jquery_fallback = true;
  }
  return $src;
}
add_action('wp_head', 'roots_jquery_local_fallback');

1 个答案:

答案 0 :(得分:2)

PHP没有示例单引号(')分隔的字符串内的文本,因此\'不起作用。它确实解释了内部双引号(“),因此反向使用单引号和双引号并使用\”。

echo "<script>window.jQuery || document.write('<script src=\"" . get_template_directory_uri() . "/assets/js/vendor/jquery-1.11.0.min.js\"><\/script>\')</script>" . "\n";