og:description'content'unterminated string literal

时间:2012-11-06 19:09:58

标签: php javascript jquery

  

可能重复:
  unterminated string literal

我在设置og:description with follow function ...

时遇到问题
function createFacebookMeta($title, $fcUrl, $fcImg, $fcDesc){    
    $fcDesc = (strlen($fcDesc) > 100) ? substr($fcDesc,0,150).'...' : $fcDesc;
    $faceBook = "<script type=\"text/javascript\">


$(document).attr('title', '".$title."');
$('meta[property=\"og:title\"]').attr('content', '".$title."');
$('meta[property=\"og:url\"]').attr('content', '".$fcUrl."');
$('meta[property=\"og:image\"]').attr('content', '".$fcImg."');
$('meta[property=\"og:description\"]').attr('content', '".$fcDesc."');
FB.XFBML.parse();
</script>";
echo $faceBook;
}

作为响应我进入萤火虫

未终止的字符串文字

 $('meta[property="og:description"]').attr('content', 'Logos gedruckt<br />  //breaks here

即使我使用striptags它报告相同...如果我没有设置og:描述默认元描述(这里是np)大约是相同的长度,因为我读到fb从它获取大约300个字符最大

谢谢

$ fcDesc是db result

$fcDesc = "Logos gedruckt
<br>
100% Baumwolle
<br>
Vorne: Logo
<br>
Rücken: Cash Ruls";

(产品说明)

1 个答案:

答案 0 :(得分:1)

您正在以破坏代码的方式将字符串输出到javascript代码中。

这是因为您没有正确编码javascript的PHP值。

一种简单的方法是使用json_encode()功能:

$faceBook = '<script type="text/javascript">
$(document).attr(\'title\', ' . json_encode($title) . '); ....';

每当需要为javascript编码PHP变量的值时使用它。 JSON是javascript的一个子集,因此效果非常好。

此外,您可能希望简化描述字符串:

$simplified = preg_replace('/\s+/', ' ', strip_tags($fcDesc));

这会删除您在那里的HTML <br>标记,然后规范化空格。

另外,让我们看一下json_encode的实际操作:

echo json_encode($simplified), "\n";

输出:

"Logos gedruckt 100% Baumwolle Vorne: Logo R\u00fccken: Cash Ruls"

正如您所看到的,json_encode不仅需要添加引号,还要将字符串中的字符正确编码为unicode序列。

在原始字符串中,您有换行符。在javascript中你不能在字符串中使用换行符(你可以在PHP中使用,但不能在javascript中使用)。在原始字符串上使用json_encode也可以解决这个问题:

"Logos gedruckt\n<br>\n100% Baumwolle\n<br>\nVorne: Logo\n<br>\nR\u00fccken: Cash Ruls"

如您所见,换行符在输出中正确写为\n。只需记住json_encode,将其用于放入javascript标记的所有变量。这将使您的代码稳定。