富文本文章同步到微信公众号格式问题

小占时光 2024-12-22 14:09:27 571


在将富文本文章同步到微信公众号时,可能会遇到格式不一致的问题。微信公众号的编辑器和富文本编辑器的格式解析有所不同,导致在复制粘贴过程中,字体、段落、图片等可能会出现问题。做文章编辑时就在思考使用Markdown还是富文本,本想两种都支持,为了统一还是使用了富文本的编辑方式。

同步到草稿

普通微信公众号是不能使用接口群发的

本系统使用得tinymce编辑器,功能比较强大。之前在文章功能中添加了发布到微信公众号的功能。但这里一个坑需要特别注意,普通微信公众号的一天只能使用一次群发功能,而且不能调用群发接口。我使用接口发布到微信公众号后,文章是发布了,但是只能自己查看,这就很尴尬了。目前我的处理方式是,将文章同步到草稿,再从草稿里面群发,这样就可以所有人都收到且查看了。

草稿接口:➤ https://api.weixin.qq.com/cgi-bin/draft/add?access_token={0}

发布接口:➤ https://api.weixin.qq.com/cgi-bin/freepublish/submit?access_token={0}

群发接口:➤ https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token={0}

可以根据需要调用需要的接口,普通认证的接口使用草稿接口就差不多了,发布还是自己手动点一下好,后如果有格式混乱也可以调整一下。

富文同步草稿格式问题

代码块的显示

虽然一键同步到微信公众号挺方便,但是兼容问题却需要自己调整一下。如果经常将自己文章同步到不同平台的人,对这个问题应该比较清楚。对于开发来说,代码显示就是重点,但是从系统同步到微信公众号,显示的是下面这样。微信公众号没有正确识别出代码块的区域。

查看一下两个平台的差异:

微信代码块在pre元素有样式,每一行都是一个code:

富文本pre下面只有一个code:

看了内容差异,主要就是code,我们只需要将富文本code下面的每一行换成一个code既可以,最后移除最外层的code既可以 ,这方法肯是可行的,我就不截图了,直接看本文,本文就是从网站同步过来的。我是是用C#开发的系统,下面的示例代码也是C#的,同语言直接复制过去就可以,如果是其他语言的可以参考一下逻辑即可。

示例代码:

 /// <summary>
 /// 微信文章代码块转换,默认是不能识别的
 /// </summary>
 /// <param name="article"></param>
 /// <returns></returns>
 private string WeChatCodeBlockSwitch(string article)
 {
     if (string.IsNullOrWhiteSpace(article))
         return article;

     // 加载HTML
     var doc = new HtmlDocument();
     doc.LoadHtml(article);

     // 查找所有<pre>标签
     var preTags = doc.DocumentNode.Descendants("pre").ToList();

     foreach (var preTag in preTags)
     {
         // 创建一个<section>标签,包裹原有的<pre>标签内容
         var sectionTag = HtmlNode.CreateNode("<section></section>");
         sectionTag.SetAttributeValue("class", "code-snippet__js");

         // 获取<pre>标签中的<code>标签
         var codeTag = preTag.Descendants("code").FirstOrDefault();
         if (codeTag != null)
         {
             // 拆分每一行,处理为单独的<code>标签
             var lines = codeTag.InnerText.Split('\n').Select(line => $"<code>{line}</code>");

             // 清空原有的<code>标签内容
             preTag.RemoveAllChildren();

             // 将每行包裹在新的<code>标签内
             foreach (var line in lines)
             {
                 var newCodeTag = HtmlNode.CreateNode(line);
                 preTag.AppendChild(newCodeTag);
             }
         }

         // 为<pre>标签添加样式
         preTag.SetAttributeValue("class", "code-snippet__js code-snippet code-snippet_nowrap");
         // 将原<pre>标签的内容移动到<section>内
         sectionTag.AppendChild(preTag.CloneNode(true));

         // 将<section>插入到原<pre>标签的位置
         preTag.ParentNode.ReplaceChild(sectionTag, preTag);
     }

     return doc.DocumentNode.OuterHtml;
 }

微信公众号粗体不显示问题

之前我也很疑惑,怎么编辑的时候是粗体,但预览的时候就不显示粗体了,我去公众号社区看了一下也有好多人遇到这种情况。其中主要问题是字体问题,每个手机设置的字体不同,有一些字体看不出来是粗体,我的解决办法就是,在元素上设置指定字体和字体大小。看着粗了一点,但不是很明显。

好看的公众号文章样式

使用公众号编辑文章发布后,文章内容样式很少。但一些博主发出来的文章样式确实很好看,这就很奇怪。对着个问题,没有开发经验的人来,直接去网页上复制,将页面上的显示内容(不是html)复制到微信公众号文章编辑器中,再修改内容就行了,如果复制过来的内容不正确那就是不能识别了。

      如果会一点前端,则给元素上添加style样式即可。例如本文的标题代码。

<h3 style="text-indent: 2em; font-size: 18px; color: #0e88eb; line-height: 1.5em; text-align: left; font-weight: bold; display: block;">
 微信公众号粗体不显示问题
</h3>

 

 

最后一次修改 : 2025/1/23 上午4:52:41

优秀
123
分享
123
奶茶
123
文章版权声明:版权归原作者(小占时光)所有。未经明确书面许可,严禁任何个人或组织以任何形式进行商业性或非商业性的使用、转载或抄袭。
评论