Phpbb 中英文间自动加空格

首先说一句,我终于从繁重的帖子编辑任务当中解脱出来了。

我们论坛有一些人,发文总是不注意格式。

导致排版非常的乱套,让人一眼望去就没有心情回答问题。

之前我一直是采用手动编辑帖子的方法。

但论坛陆陆续续也有一年了,我发现这种情况依然没有改观。

我意识到这就是不是一个能够感化的问题。

那么为了诸多热心回复者的心情考虑,我就找 @mucid 开发了这么一个 Hack:

在中英文之间自动加上空格,至少英文单词能够看清楚些。

Hack 方法贴出来供其它有 php 论坛的朋友们参考:

--- posting.php	2014-04-23 15:45:19.927907426 +0800
+++ posting-vincent.php	2014-04-23 16:11:48.997041328 +0800
@@ -24,6 +24,17 @@
 $user->session_begin();
 $auth->acl($user->data);
 
+function ce_hybrid_fix($content) {
+	// 将@内容提取,避免评论者名字被处理
+	$at = preg_replace('/(^\<a href="#(li-)?comment-.*?\/a\>)(.*)/si','$1',$content);
+	if($at == $content)$at = '';
+	$new_content = preg_replace('/^\<a href="#(li-)?comment-.*?\/a\>(.*)/si','$2',$content);
+	// 主要替换规则
+	$new_content = preg_replace("/(\x{4e00}-\x{9fa5}])([a-z0-9©®#;=_\[\]\$\%\^\*\-\+\(\/])/iu","$1 $2",$new_content);
+	$new_content = preg_replace("/([a-z0-9©®#!~&;=_\?\[\]\,\.\:\?\$\%\^\*\-\+\)\/])(\x{4e00}-\x{9fa5}])/iu","$1 $2",   $new_content);
+	return $at . $new_content;
+}
+
 
 // Grab only parameters needed here
 $post_id	= request_var('p', 0);
@@ -1260,7 +1271,7 @@
 				'post_edit_locked'		=> (int) $post_data'post_edit_locked'],
 				'bbcode_bitfield'		=> $message_parser->bbcode_bitfield,
 				'bbcode_uid'			=> $message_parser->bbcode_uid,
-				'message'				=> $message_parser->message,
+				'message'				=> ce_hybrid_fix($message_parser->message),
 				'attachment_data'		=> $message_parser->attachment_data,
 				'filename_data'			=> $message_parser->filename_data,

因为在 LaTeX 里面中英文也是可以自动分割。所以每次发文格式经常不注意,现在终于也自动化了。

来自我的 MI 2S 上的 Tapatalk

囧,立刻就发现了一个 Bug,手机端是不支持的。 :joy:

可以用机器人自动编辑已经发了的帖吗?顺便把以前的也扫描一遍

来自我的 MI 2S 上的 Tapatalk

机器人 @mucid 正在写。现在只有电脑端发帖会自动纠正格式。

不过小白要提问好歹也会端正态度用电脑发帖的吧。

机器人脚本

把 auto_space.txt 重命名为 auto_space.php

进去填写你的数据库名、数据库用户名和密码。

然后上传到服务器。

用网页访问也好,ssh 后用

php auto_space.php

也好,返回“ok”你就成功了。
auto_space.txt (1.16 KB)

除了发文主题的 text,还有几个地方:

  1. phpbb_posts 表的 post_subject
  2. phpbb_topics 表的 topic_title
  3. phpbb_topics 表的 topic_last_post_subject

于是你要改

$sql = “UPDATE phpbb_posts SET post_text = ‘$new_content’ WHERE post_id = $id”;

$query = “SELECT * FROM phpbb_posts ORDER BY post_id ASC”;

change( $row’post_id’], $row’post_text’]);

这几处地方。post_subject 的是:

$sql = "UPDATE phpbb_posts SET post_subject = '$new_content' WHERE post_id = $id";
$query = "SELECT * FROM phpbb_posts ORDER BY post_id ASC";
change( $row'post_id'], $row'post_subject']);

topic_title 的是:

$sql = "UPDATE phpbb_topics SET topic_title = '$new_content' WHERE topic_id = $id";
$query = "SELECT * FROM phpbb_topics ORDER BY topic_id ASC";
change( $row'topic_id'], $row'topic_title']);

topic_last_post_subject 的是:

$sql = "UPDATE phpbb_topics SET topic_last_post_subject = '$new_content' WHERE topic_id = $id";
$query = "SELECT * FROM phpbb_topics ORDER BY topic_id ASC";
change( $row'topic_id'], $row'topic_last_post_subject']);

改好之后每样运行一遍(一共四遍),就 Okay 了。

好强大的 regex 呀

发现了个 bug ,
比如:

http://tc.rpgsky.net/uploads/2015/07/ 抓图 4.png

好像没有考虑到 bbcode 代码

挖坟

目前代码段中的文字也会被自动加上空格,这可能会影响到代码逻辑:
[用 fontconfig 和 TamperMonkey 解决 Chrome 中文粗体(以及常规字体)问题)

可以不在代码段部分自动加空格么?

这个代码还是比较粗糙的,问题是粗糙的我都不会写…所以群策群力吧…

从我的 iPhone 发送,使用 Tapatalk