我在设置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";
(产品说明)
答案 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标记的所有变量。这将使您的代码稳定。