Html2Markdown API里面代码换行符会被自动处理掉

动作需求 · 1307 次浏览
WangBK 创建于 2022-08-19 18:12

使用 https://tools.getquicker.cn/ 提供的API转换HTML文档为markdown 的时候,换行符会被处理掉

比如HTML内容JSON转化之后为:

{"Source":"<h2><a name=\"t2\"></a><a id=\"printf_7\"></a>printf格式化输出</h2> \r\n<h3><a name=\"t3\"></a><a id=\"_8\"></a>基本的数据格式</h3> \r\n<p><strong>下面说几种常用的格式,都是在C语言编程中常用的,多练就能熟练,楞背可能记得不牢固</strong></p> \r\n<div class=\"table-box\"><table><tbody><tr><th>格式控制符</th><th>意义</th></tr><tr><td>%o</td><td>以八进制整形</td></tr><tr><td>%d</td><td>十进制整形</td></tr><tr><td>%x</td><td>十六进制整形</td></tr><tr><td>%f</td><td>输出浮点数,默认小数点后6位</td></tr><tr><td>%lf</td><td>输出双精度实数(就是比float更精确),可以精确到小数点后16位,默认6位 </td></tr><tr><td>%c</td><td>输出单个字符</td></tr><tr><td>%s</td><td>输出字符串</td></tr><tr><td>%%</td><td>输出一个百分号%</td></tr></tbody></table></div> ## 格式修饰符 \r\n<p>都是基于上面的基本数据类型进行修饰的</p> \r\n<p><strong>以<code style=\"user-select: auto;\" onclick=\"mdcp.copyCode(event)\">%d</code>为例</strong></p> \r\n<div class=\"table-box\"><table><tbody><tr><th>格式修饰符</th><th>意义</th></tr><tr><td>%smd</td><td>域宽为m,大于m就正常输出,小于m则左边补s,凑够m位,s省略默认补空格</td></tr><tr><td>%.nf</td><td>控制输出小数点后n位</td></tr></tbody></table></div> \r\n<h3><a name=\"t4\"></a><a id=\"_35\"></a>案例分析</h3> \r\n<pre data-index=\"0\" class=\"prettyprint\" style=\"user-select: auto;\"><code class=\"prism language-c has-numbering\" onclick=\"mdcp.copyCode(event)\" style=\"position: unset; user-select: auto;\"><span class=\"token keyword\">int</span> a <span class=\"token operator\">=</span> <span class=\"token number\">23</span><span class=\"token punctuation\">;</span>\r\n<span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"%d\"</span><span class=\"token punctuation\">,</span>a<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>正常输出<span class=\"token number\">23</span>\r\n<span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"%5d\"</span><span class=\"token punctuation\">,</span>a<span class=\"token punctuation\">)</span>域宽为<span class=\"token number\">5</span><span class=\"token punctuation\">,</span>但是a长度只有<span class=\"token number\">2</span><span class=\"token punctuation\">,</span>所以默认左边补空格<span class=\"token punctuation\">,</span>凑够到<span class=\"token number\">5</span>位\r\n<span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"%05d\"</span><span class=\"token punctuation\">,</span>a<span class=\"token punctuation\">)</span>输出域宽为<span class=\"token number\">5</span><span class=\"token punctuation\">,</span>但是a长度只有<span class=\"token number\">2</span><span class=\"token punctuation\">,</span>则默认左边补<span class=\"token number\">0</span><span class=\"token punctuation\">,</span>凑够到<span class=\"token number\">5</span>位\r\n\r\n\r\n<span class=\"token keyword\">float</span> b <span class=\"token operator\">=</span> <span class=\"token number\">2.3</span><span class=\"token punctuation\">;</span>默认会是小数点后<span class=\"token number\">6</span>位\r\n<span class=\"token keyword\">float</span>在输出时会自动根据精度四舍五入\r\n<span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"%.2f\"</span><span class=\"token punctuation\">,</span>b精确到小数点后<span class=\"token number\">2</span>位\r\n<span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"%10lf\"</span><span class=\"token punctuation\">,</span>b<span class=\"token punctuation\">)</span>域宽是<span class=\"token number\">10</span><span class=\"token punctuation\">,</span>就是整数部分加上小数部分再加上小数点一共<span class=\"token number\">10</span>位<span class=\"token punctuation\">,</span>不够左边补空格\r\n<div class=\"hljs-button {2}\" data-title=\"免登录复制\" data-report-click=\"{&quot;spm&quot;:&quot;1001.2101.3001.4334&quot;}\" onclick=\"hljs.copyCode(event);setTimeout(function(){$('.hljs-button').attr('data-title', '免登录复制');},3500);\"></div></code><ul class=\"pre-numbering\" style=\"\"><li style=\"color: rgb(153, 153, 153);\">1</li><li style=\"color: rgb(153, 153, 153);\">2</li><li style=\"color: rgb(153, 153, 153);\">3</li><li style=\"color: rgb(153, 153, 153);\">4</li><li style=\"color: rgb(153, 153, 153);\">5</li><li style=\"color: rgb(153, 153, 153);\">6</li><li style=\"color: rgb(153, 153, 153);\">7</li><li style=\"color: rgb(153, 153, 153);\">8</li><li style=\"color: rgb(153, 153, 153);\">9</li><li style=\"color: rgb(153, 153, 153);\">10</li></ul></pre> \r\n<p>结果<br> <img src=\"https://img-blog.csdnimg.cn/9bdc45f5cb5747748039b540cc448926.png\" alt=\"在这里插入图片描述\"></p>\r\n                </div><div><div></div></div>\r\n                <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-22a2fefd3b.css\" rel=\"stylesheet\">\r\n                <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-4f8fbf9108.css\" rel=\"stylesheet\">\r\n        </div>"}

调用API之后代码结果:

int a = 23; printf("%d",a);正常输出23 printf("%5d",a)域宽为5,但是a长度只有2,所以默认左边补空格,凑够到5位 printf("%05d",a)输出域宽为5,但是a长度只有2,则默认左边补0,凑够到5位 float b = 2.3;默认会是小数点后6位 float在输出时会自动根据精度四舍五入 printf("%.2f",b精确到小数点后2位 printf("%10lf",b)域宽是10,就是整数部分加上小数部分再加上小数点一共10位,不够左边补空格 12345678910

换行符全没有了

希望的结果是这样的保留之前的代码的格式:

int a = 23;
printf("%d",a);正常输出23
printf("%5d",a)域宽为5,但是a长度只有2,所以默认左边补空格,凑够到5位
printf("%05d",a)输出域宽为5,但是a长度只有2,则默认左边补0,凑够到5位


float b = 2.3;默认会是小数点后6位
float在输出时会自动根据精度四舍五入
printf("%.2f",b精确到小数点后2位
printf("%10lf",b)域宽是10,就是整数部分加上小数部分再加上小数点一共10位,不够左边补空格

回复内容
CL 2022-08-19 21:56
#2

研究了一下,确实有类似的现象。

不过这个估计很难实现,这些代码在着色的时候已经全部替换成html标签,并且通过css类控制格式,在通过html转md的时候已经没法判断哪些地方有换行了。

====

改了一点参数,可以试一下有没有什么效果。

CL 最后更新于 2022-08-19 22:16
WangBK 回复 CL 2022-08-19 23:06 :

有效果,但是前后会返回一些CSS的信息。

还会有一些 \t 缩进的问题(显示的是“\t”字符,不是缩进),不过影响不大。


https://github.com/liangtengyu/to_markdown 这个不知道是怎么实现的,兼容效果很好

CL 回复 WangBK 2022-08-19 23:16 :

不太懂java技术栈。 目前quicker这个是基于 https://github.com/mysticmind/reversemarkdown-net 项目的。如果有兴趣可以试试。 

WangBK 回复 CL 2022-08-20 15:57 :

大佬,要不然还是回退一下版本吧,简书的HTML已经不生效了:

https://www.jianshu.com/p/7c0f728c70ce

我不太懂css类控制格式,是不是可以不处理换行,因为文字类的换行没有问题,代码的有问题。

CL 回复 WangBK 2022-08-20 16:29 :

回退到昨天之前的版本了。😂

回复主贴