使用PHP输出JavaScript时会出现神秘的换行符

Mystery line break appears when outputting JavaScript with PHP.

本文关键字:换行符 PHP 输出 JavaScript 使用      更新时间:2023-09-26

我正在使用PHP输出一些JavaScript作为WordPress短代码。我的php看起来像这样:

$output="<script type='text/javascript' >
jQuery(document).ready(function() {
    jQuery('#photo{$photo_id}').on('click', function(){ 
      Shadowbox.open({
        content: '<div id=''popup{$photo_id}'' class=''popup''>{$content}</div>',
        player:     'html',
        height:     500,
        width:      1200,
        handleOversize: 'drag'
        }); 
    });
});       
</script>";
return $output;

但是输出在Shadowbox的内容论证中的第一个引号之后有一个换行符。

像这样:

jQuery(document).ready(function() {
    jQuery('#stylistphoto1').on('click', function(){    
      Shadowbox.open({
        content: '
<div> id=''popup1'' class=''popup''> . . .

这给了我一个"未终止的字符串文字"错误,并使我的脚本失败。

发生了什么事?

注意事项:a.这是用UTF-8编码的,没有BOM。b.这在某一点上确实奏效了。c.如果我传递一个空字符串作为内容论证,效果很好,当然,这对我没有任何帮助。

首先,我不会在php变量中定义javascript功能,然后在某个地方回显,这是一种非常糟糕的做法。

这里的问题可能是,你的造型上有什么东西打破了这条线,因为它很长。你可以做什么来解决这个问题是做以下事情:

$output="<script type='text/javascript' >
jQuery(document).ready(function() {
    jQuery('#photo{$photo_id}').on('click', function(){ 
      Shadowbox.open({
        content: '<div id=''popup{$photo_id}'' ' +
                 'class=''popup''>{$content}</div>',
        player:     'html',
        height:     500,
        width:      1200,
        handleOversize: 'drag'
        }); 
    });
});       
</script>";
return $output;

WordPress的自动格式化功能之一,wpautop过滤器导致了这个问题。

我已经在用Chris Coyer的"原始"短代码了(http://css-tricks.com/snippets/wordpress/disable-automatic-formatting-using-a-shortcode/)因此,答案很简单,只需在将脚本输出回内容区域之前,将其包装在[原始][/原始]短代码中即可。

哈哈哈!

在我看来,content: '<div id=''popup{$photo_id}'' class=''popup''>{$content}</div>'是个问题,因为参数content的值被解释为'<div id=''。它在下一个引号处停止。如果您的PHP版本不喜欢这个(看起来),您应该通过串联来分隔变量的这一部分。

    $output="<script type='text/javascript' >
jQuery(document).ready(function() {
    jQuery('#photo{$photo_id}').on('click', function(){ 
      Shadowbox.open({";
$output .= "
        content: '<div id='"popup{$photo_id}'" class='"popup'">{$content}</div>,'";
$output .= "
        player:     'html',
        height:     500,
        width:      1200,
        handleOversize: 'drag'
        }); 
    });
});       
</script>";
return $output;

在可能的情况下,最好将'用于echo语句,并将"用于内部的所有内容,以避免处理引号转义,例如echo 'My friend says "hello", Tom.';