在将富文本文章同步到微信公众号时,可能会遇到格式不一致的问题。微信公众号的编辑器和富文本编辑器的格式解析有所不同,导致在复制粘贴过程中,字体、段落、图片等可能会出现问题。做文章编辑时就在思考使用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>