QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

微信扫一扫 分享朋友圈

已有 153 人浏览分享

开启左侧

用Delphi写了一个小程序,批量处理Discuz帖子里的bbcode

[复制链接]
153 0
  由于Discuz系统内使用的标签代码是bbcode,如果你直接复制网站页面到Discuz里面发帖,点击编辑器的“纯文本”选项,你会发现很多的html标签被自动转换成了bbcode,手动处理起来既麻烦又枯燥,于是,我用Delphi写了一个处理工具,一键处理这些标签,现在分享给大家,有需要的朋友们可以自取。
image.jpg
  主要功能代码如下:
  1. function TForm1.RemoveCustomBBcodeTags(const AText: string; const ATags: array of string): string;
  2. var
  3.   PStart, PEnd, PCurrent, I, ContentEnd: Integer;
  4.   TempStr, CurrentTag, EndTag, FullTag: string;
  5.   IsTagToRemove, IsContentToRemove: Boolean;
  6.   ContentTags: TStringList;
  7. begin
  8.   // 初始化需要删除内容的特殊标签列表
  9.   ContentTags := TStringList.Create;
  10.   try
  11.     ContentTags.Add('img');
  12.     ContentTags.Add('url');
  13.     ContentTags.Add('flash');
  14.     Result := AText;
  15.     PCurrent := 1;
  16.     while PCurrent <= Length(Result) do
  17.     begin
  18.       // 查找 '['
  19.       PStart := Pos('[', Copy(Result, PCurrent, MaxInt));
  20.       if PStart = 0 then
  21.         Break;
  22.       PStart := PStart + PCurrent - 1;
  23.       // 查找 ']'
  24.       PEnd := Pos(']', Copy(Result, PStart, MaxInt));
  25.       if PEnd = 0 then
  26.         Break;
  27.       PEnd := PEnd + PStart - 1;
  28.       // 提取完整标签(保留原始大小写)
  29.       FullTag := Copy(Result, PStart, PEnd - PStart + 1);
  30.       TempStr := LowerCase(FullTag);
  31.       // 重置标志
  32.       IsTagToRemove := False;
  33.       IsContentToRemove := False;
  34.       CurrentTag := '';
  35.       // 检查是否是我们要删除的标签
  36.       for I := Low(ATags) to High(ATags) do
  37.       begin
  38.         CurrentTag := LowerCase(ATags[I]);
  39.         // 精确匹配开始标签(考虑标签边界)
  40.         if (TempStr = '[' + CurrentTag + ']') or (Pos('[' + CurrentTag + ' ', TempStr) = 1) or (Pos('[' + CurrentTag + '=', TempStr) = 1) then
  41.         begin
  42.           IsTagToRemove := True;
  43.           // 检查是否是需删除内容的特殊标签
  44.           if ContentTags.IndexOf(CurrentTag) >= 0 then
  45.             IsContentToRemove := True;
  46.           Break;
  47.         end
  48.         // 精确匹配结束标签
  49.         else if (TempStr = '[/' + CurrentTag + ']') then
  50.         begin
  51.           IsTagToRemove := True;
  52.           Break;
  53.         end;
  54.       end;
  55.       if IsTagToRemove then
  56.       begin
  57.         // 处理需要删除内容的特殊标签
  58.         if IsContentToRemove and (Pos('[/', TempStr) <> 1) then
  59.         begin
  60.           // 查找对应的结束标签
  61.           EndTag := '[/' + CurrentTag + ']';
  62.           ContentEnd := PosEx(EndTag, Result, PEnd + 1);
  63.           if ContentEnd > 0 then
  64.           begin
  65.             // 删除整个标签及其内容(从开始标签到结束标签末尾)
  66.             Delete(Result, PStart, ContentEnd + Length(EndTag) - PStart);
  67.             PCurrent := PStart; // 重置位置重新扫描
  68.             Continue;
  69.           end;
  70.         end;
  71.         // 普通标签或未找到结束标签的特殊标签,只删除标签本身
  72.         Delete(Result, PStart, PEnd - PStart + 1);
  73.         PCurrent := PStart; // 重置位置重新扫描
  74.       end
  75.       else
  76.       begin
  77.         PCurrent := PEnd + 1; // 跳过这个不需要删除的标签
  78.       end;
  79.     end;
  80.   finally
  81.     ContentTags.Free;
  82.   end;
  83. end;
复制代码
  程序放在下面了,有需要的朋友们可自取。双击上面的待处理文本框,将自动复制剪贴板内容到里面。双击下面的已处理文本框,将自动复制文本框内容到剪贴板。
BBCODE标签处理工具.zip (213.66 KB, 下载次数: 4)
BBCode标签处理源代码.zip (448.31 KB, 下载次数: 2, 售价: 100 金币)

上一篇:抖音西瓜视频开始店大欺客,外站不能通过iframe播放了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

37

关注

177

粉丝

15238

主题
  • 公众号

    微信公众号

  • 微信

    站长微信

关于我们|手机版|玩慈利网 湘公网安备 43082102000138号 ( 湘ICP备12012604号-1 )

GMT+8, 2025-5-10 17:15 , Processed in 0.041020 second(s), 8 queries , Gzip On, Redis On.

Powered by Discuz! 在此致以诚挚谢意!

CopyRight © 2011-2025 wancili.com