如何在WordPress检测到西里尔字符时禁用评论功能
拦截含西里尔字符的WordPress垃圾评论方案
关于ASCII 437/850/852字符集的可行性
完全可以通过限制评论仅使用ASCII 437、850、852字符集拦截西里尔字符——这三个字符集均以基础ASCII(0-127)为核心,仅扩展了西欧语言相关的特殊字符,完全不包含西里尔字符。只要评论内容超出这个范围,就能直接判定为垃圾评论拦截。
代码片段实现方案
直接在WordPress中添加以下代码,通过评论提交前的钩子拦截不符合字符要求的评论:
add_action('pre_comment_on_post', 'block_non_ascii_western_comments'); function block_non_ascii_western_comments($post_id) { // 获取提交的评论内容 $comment_content = isset($_POST['comment']) ? trim($_POST['comment']) : ''; // 方案1:限制仅为单字节字符(覆盖ASCII 437/850/852全字符集) if (!preg_match('/^[\x00-\xFF]*$/', $comment_content)) { wp_die('评论内容包含不允许的字符,提交失败。'); } // 方案2:精准拦截西里尔字符(若需仅针对西里尔字符限制) // if (preg_match('/[\x{0400}-\x{04FF}]/u', $comment_content)) { // wp_die('评论内容包含不允许的字符,提交失败。'); // } }
代码说明
- 用
pre_comment_on_post钩子在评论正式提交前检查,性能更优 - 方案1通过正则限制内容仅为单字节字符,直接排除Unicode编码的西里尔多字节字符,完全覆盖你提到的三个ASCII字符集范围
- 方案2精准匹配西里尔字符的Unicode区间(U+0400至U+04FF),仅拦截含西里尔字符的评论
- 拦截后通过
wp_die返回错误提示
使用方法
- 登录WordPress后台,进入「外观」→「主题文件编辑器」
- 找到并打开当前主题的
functions.php文件 - 将代码粘贴到文件末尾并保存
- 也可使用「代码片段」插件添加代码,避免主题更新丢失修改
内容的提问来源于stack exchange,提问作者x0100
相关产品推荐
相关产品推荐

