在 WordPress 中转义 JavaScript 片段内部 PHP 函数

Escaping JavaScript snippet Inside PHP function in WordPress

基于 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');

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";