4

我对我网站上的 og:title 标记有一点困难。每当文章标题带有撇号并在 Facebook 上被分享时,'就会出现而不是撇号。我已经将我的元标记与成功显示他的撇号的朋友的网站进行了比较,我能找到的唯一区别是:

在我的网站的 og:title 中放置撇号的代码: '

放置在 og:title 中的撇号代码用于朋友的网站: '

我认为我的网站在转换撇号后正在转换与号,这使它'在 Facebook 上显示。

我正在使用 K2 for Joomla!,并在他们的论坛上提出了这个问题,但我已经 5 天没有收到任何回复。

这是我在 com_k2>views>item>view.html.php 文件中找到的代码:

$document->setMetaData('og:title', htmlspecialchars($document->getTitle(), ENT_QUOTES,  'UTF-8'));

我不是 php 精通,有什么办法可以改变这个,所以代码会显示出来吗?如果有帮助,这里有一个链接,指向网站标题中带有撇号的文章。

感谢您的时间。

4

1 回答 1

3

请参阅htmlspecialchars 的文档并查看何时转换单引号(通常用作撇号)的描述。ENT_QUOTES如果已设置,它只会对单引号进行编码,并且您已ENT_QUOTES在调用 htmlspecialchars 时进行了设置。

如果您不希望对单引号进行编码,那么您只需停止使用该标志并将其切换为ENT_COMPAT(编码双引号而不是单引号),以便您的语句变为:

$document->setMetaData('og:title',
        htmlspecialchars($document->getTitle(),
        ENT_COMPAT,  'UTF-8'));

(我添加了换行符,以便在此页面上轻松阅读,但不要在您的实际代码中添加换行符。)

另请注意,htmlspecialchars 有一个名为double_encode的最终可选参数(在 PHP 5.2.3 中添加) 。它默认为true,但如果您将此参数设置为 ,false那么 PHP 将不会对现有实体进行编码,因此即使您对单引号进行了编码,结果'也不会'通过进一步调用 htmlspecialchars 来进一步编码,它将保留为'.

于 2013-05-06T18:27:10.360 回答