微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

放置在og:我网站标题中的撇号代码
    &放大器;放大器;#039;

放置在og中的撇号代码:朋友网站的标题
    &安培;#039;

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

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

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

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

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

感谢您的时间.

解决方法:

请参阅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将不会对现有实体进行编码,所以即使你对单引号进行了编码,结果也会出现'将不会进一步编码为& amp; amp; amp; amp; amp; amp; amp;通过进一步调用htmlspecialchars,它将保留为'.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐