0

可能重复:
未终止的字符串文字

我在设置 og:description 时遇到问题...

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:description默认元描述(这里是np),它的长度大致相同,因为我读到fb最多需要大约300个字符

谢谢你

$fcDesc 是数据库结果

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

(产品描述)

4

1 回答 1

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

这确实会删除<br>您在其中的 HTML 标记,然后对空格进行规范化。

让我们看看json_encode实际情况:

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

输出:

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

如您所见,json_encode它不仅负责添加引号,还负责将字符串中的字符正确编码为 un​​icode 序列。

在您的原始字符串中,您有换行符。在 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 标记的所有变量。这将使您的代码稳定。

于 2012-11-06T19:56:39.497 回答