WordPress网站标题的分隔符-被转义为& #8211的解决办法

最近不少用户给我反馈在使用WordPress主题时,在SEO设置中的分隔符自定义成英文特殊字符横杠”-“后,会被转义成HTML字符&#8211。

原因是这一切都是WordPress想的太过周到的锅,默认情况下,它会调用函数wptexturize来执行这个转换。我们知道WordPress有些自动功能,出于安全的考虑或者外国人的习惯问题,经常有点有点水土不服的意味。当然WordPress也是过于好心了,毕竟全世界这么多的站点都是运行着WordPress,只能照顾到大部分的需求,而不能精准解决部分人的要求了。否则也不会有数以万计的插件、主题了。毕竟,有了这个平台,怎么搭建出符合自己要求的网站,就是各有各的想法和实现的过程了。


而WordPress的自动转义,是使用了wptexturize()函数将纯文本字符转换成格式化的 HTML 实体,即形如–会转换成–这样的文本,显示的时候是没有问题,但是查看源代码是可以看到的。另外某些搜索引擎是没有差异化的对待转义后的实体,直接收录。

这时候也不是那么好看了,特别是某些时候还会变的比较凌乱。因此需要从侧面来解决这个问题,使之不那么“自动化智能化”。关于wptexturize()函数的介绍在WordPress的官网上有https://developer.wordpress.org/reference/functions/wptexturize/,Replaces common plain text characters into formatted entities ,大致的意思是将普通纯文本字符替换为格式化实体。函数是在wp-includes/formatting.php 这个文件中的,51行开始,一直到315行的样子,简单摘录下:

function wptexturize( $text, $reset = false )
{ global
$wp_cockneyreplace,
$shortcode_tags;
static $static_characters = null,
$static_replacements = null,
$dynamic_characters = null,
$dynamic_replacements = null,
$default_no_texturize_tags = null,
$default_no_texturize_shortcodes = null,
$run_texturize = true, $apos = null,
$prime = null, $double_prime = null,
$opening_quote = null, $closing_quote = null,
$opening_single_quote = null,
$closing_single_quote = null,
既然知道代码函数了,那么要解决也比较有针对性了,根据网上其他人的指引,大概有三个方法:

方法一,使用插件。
Quotmarks Replacer 插件可以通过禁用 wptexturize 函数,解决 WordPress 自动将半形的单引号、双引号和省略号转换为全形标点的问题。使后台输入的标点格式与前台读者浏览的标点格式保持一致。并且对 multisite 多站点(WordPress Mu)有良好的支持。插件可以在WordPress官网下载https://wordpress.org/plugins/quotmarks-replacer/#description

方法二,禁用该函数。
通过把该代码加到functions.php函数中,即可实现相应的结果。

add_filter( ‘run_wptexturize’, ‘__return_false’ );

方法三,禁止函数对标题的转义
通过如下的代码来完成:

remove_filter(‘the_title’, ‘wptexturize’);
remove_filter(‘wp_title’, ‘wptexturize’);
remove_filter(‘single_post_title’, ‘wptexturize’);

方法四,强制阻止WordPress代码转义

/** 强制阻止WordPress代码转义/

function git_esc_html($content) {

$regex = ‘/(]?class\s?=\s?[“,\’].?prettyprint.?[“,\’].?>)(.?)(<\/pre>)/sim’;
return preg_replace_callback($regex, ‘git_esc_callback’, $content);
}
function git_esc_callback($matches) {
$tag_open = $matches[1];
$content = $matches[2];
$tag_close = $matches[3];
$content = esc_html($content);
return $tag_open . $content . $tag_close;
}
add_filter(‘the_content’, ‘git_esc_html’, 2);
add_filter(‘comment_text’, ‘git_esc_html’, 2);
add_filter(‘asgarosforum_filter_post_content’, ‘git_esc_html’, 2);

这样的话就不会出现在站点标题、页面的标题中出现的&#8211字符。

如上四种方法在网上都有相应的介绍,但在版本(WordPress 6.4.2)上测试了一、二、三、四方法,都不行。不知道是否WordPress升级后的原因引起,也可能是这几种方法只对旧版本有效。

另外如果把wp-includes/formatting.php中的116行这行注释掉,会是这样的效果,-消失了。但文章页面依然存在转义的情况。

如果以上方法都不行的话,可以直接把wp-includes/formatting.php文件102行

$en_dash = _x( ‘& #8211;’, ‘en dash’ );

修改为

$en_dash = _x( ‘–’, ‘en dash’ );

如果你发现有其他办法,请留言给我们。

《免责声明》本文由 (一零叁六资源)整理自网络,如转载请注明出处 :http://www.1o36.com

本站发布的内容若侵犯到您的权益,请邮件联系 dxyit888@163.com 删除,我们将及时处理!

==================================================

本站大部分下载资源收集于网络,不保证其完整性以及安全性,请下载后自行测试。

本站资源仅供学习和交流使用,版权归资源原作者所有,请在下载后24小时之内自觉删除。

若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,与本站无关。

为您推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注