WordPress招聘板TinyMCE编辑器用户提交超链接被引号损坏如何解决
WordPress TinyMCE 超链接异常损坏解决方案
针对用户从Word、其他网页复制粘贴内容导致链接被插入智能引号(%E2%80%9D)、URL异常拼接的问题,可按以下优先级实施方案,所有代码均可直接复制使用,无需PHP开发基础:
方案1:修改TinyMCE编辑器配置,从输入层拦截问题
该方案直接在编辑器层面过滤粘贴内容的异常字符,避免无效内容进入提交流程。
将以下代码添加到你当前使用的WordPress主题的functions.php文件末尾,或者使用自定义代码片段插件插入:
// 自定义TinyMCE配置,修复粘贴链接异常 add_filter('tiny_mce_before_init', 'custom_tinymce_fix_paste_links'); function custom_tinymce_fix_paste_links($mceInit) { // 开启粘贴过滤,移除Word等来源的隐藏格式、智能引号 $mceInit['paste_preprocess'] = "function(plugin, args) { // 替换所有智能引号(左/右双引号、单引号)为普通字符 args.content = args.content.replace(/[“”„«»]/g, '\"').replace(/[‘’‚‹›]/g, \"'\"); // 清理href属性内的多余引号 args.content = args.content.replace(/href\s*=\s*[\"']([^\"']*)[\"']/gi, function(match, url) { // 移除URL内所有引号类字符,自动补全协议缺失的外部链接 url = url.replace(/[\"'“”‘’]/g, '').trim(); if (url.match(/^\/\//) || url.match(/^[a-zA-Z0-9-]+\.[a-zA-Z]{2,}/) && !url.match(/^https?:\/\//)) { url = 'https://' + url.replace(/^\/\//, ''); } return 'href=\"' + url + '\"'; }); }"; // 强制链接为绝对路径,避免相对路径拼接问题 $mceInit['relative_urls'] = false; $mceInit['remove_script_host'] = false; $mceInit['convert_urls'] = true; return $mceInit; }
方案2:后端提交时二次校验清理,兜底拦截异常
就算编辑器层漏过了问题内容,在内容入库前再做一次全局过滤,确保不会生成异常链接:
同样将以下代码添加到functions.php或自定义代码片段中:
// 提交内容时清理异常链接字符 add_filter('wp_insert_post_data', 'custom_clean_post_links_before_save', 10, 2); function custom_clean_post_links_before_save($data, $postarr) { // 仅处理招聘板对应的文章类型,如果你站点的招聘信息post_type是job,就替换下方的post为你的实际类型 if ($data['post_type'] != 'post') { return $data; } // 清理所有智能引号编码和实体 $content = $data['post_content']; $content = str_replace(['%E2%80%9D', '%E2%80%9C', '“', '”', '“', '”'], '', $content); // 修复异常拼接的URL $content = preg_replace('/href\s*=\s*["\']([^"\']*%E2%80%9D[^"\']*)["\']/i', function($matches) { $url = $matches[1]; // 移除当前站点域名前缀和异常字符 $site_url = preg_quote(home_url(), '/'); $url = preg_replace("/^{$site_url}[^\/]*\/\"?/i", '', $url); $url = str_replace('%E2%80%9D', '', $url); // 补全协议 if (!preg_match('/^https?:\/\//i', $url)) { $url = 'https://' . ltrim($url, '/'); } return 'href="' . esc_url($url) . '"'; }, $content); $data['post_content'] = $content; return $data; }
注意:如果你的招聘信息不是默认的文章(post)类型,需要把代码里的
post替换为你站点实际的自定义文章类型别名,比如job、recruit等。
方案3:禁用WordPress默认智能引号转换
WordPress默认会把内容里的直引号转换为弯引号,也可能加剧该问题,可添加以下代码关闭该功能:
// 禁用智能引号转换 remove_filter('the_content', 'wptexturize'); remove_filter('the_excerpt', 'wptexturize'); remove_filter('the_title', 'wptexturize'); remove_filter('comment_text', 'wptexturize');
验证方法
配置完成后,可从Word文档中复制一个带超链接的内容粘贴到TinyMCE编辑器,发布后查看链接是否正常,也可以手动构造带“右双引号的链接测试,确认发布后链接无异常拼接、无多余引号即可。
内容的提问来源于stack exchange,提问作者polg
相关产品推荐
相关产品推荐

