使用PHP输出JavaScript时出现神秘断线。

时间:2012-08-21 23:03:02

标签: php javascript wordpress shadowbox

我正在使用PHP为WordPress短代码输出一些JavaScript。我的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\'> . . .

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

发生了什么事?

注意: 一个。这是在没有BOM的情况下以UTF-8编码的。 湾这确实有效。 C。如果我传递一个空字符串作为内容争论,它工作得很好,当然,这对我没有任何帮助。

3 个答案:

答案 0 :(得分:0)

首先,我不会在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;

答案 1 :(得分:0)

在我看来,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.';

答案 2 :(得分:0)

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

我已经在使用Chris Coyer的“原始”短代码,(http://css-tricks.com/snippets/wordpress/disable-automatic-formatting-using-a-shortcode/)所以答案就像包装一样简单[raw] [/ raw]中的脚本在将其输出回内容区域之前将其缩短。

哈哈哈!