htmlspecialchars将撇号转换为' for facebook og:title tag

时间:2013-05-06 17:22:20

标签: php facebook metadata joomla2.5 joomla-k2

我在网站上使用og:title标签轻微挣扎。每当文章标题有撇号并在Facebook上分享时,'会显示而不是撇号。我已经将我的元标记与成功显示其撇号的朋友网站进行了比较,我能找到的唯一区别是:

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

放置在og中的撇号代码:朋友网站的标题:     '

我认为我的网站在转换了撇号之后正在转换&符号,这使它在Facebook上显示为'

我正在为Joomla使用K2!并在他们的论坛上提出了这个问题,但我现在还没有在5天内收到回复。

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

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

我不精通php,有什么方法可以改变这个,所以代码会出现吗? 如果它有帮助,这里有一个link到文章标题中的撇号文章。

感谢您的时间。

1 个答案:

答案 0 :(得分:3)

请参阅the documentation for htmlspecialchars并查看何时转换单引号(通常用作撇号)的说明。如果设置了ENT_QUOTES,它只对单引号进行编码,并且在调用htmlspecialchars时设置了ENT_QUOTES

如果你不想对单引号进行编码,那么你只需要停止使用该标志并将其切换为ENT_COMPAT(编码双引号而不是单引号),这样你的声明变成:

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

(我添加了换行符,因此在此页面上很容易阅读,但不要在实际代码中添加换行符。)

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

相关问题