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,它将保留为'.
标签:php,facebook,metadata,joomla2-5,joomla-k2 来源: https://codeday.me/bug/20190629/1327445.html