# 如何修复格式问题？ - markdown迁移到HTML不当

**URL:** https://meta.discourse.org/t/how-to-fix-formatting-issues-markdown-badly-migrated-to-html/301493
**Category:** Migration
**Tags:** flarum
**Created:** [2024年三月29日 13:19 UTC](https://meta.discourse.org/t/how-to-fix-formatting-issues-markdown-badly-migrated-to-html/301493 "2024-03-29T13:19:35Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![MartinC](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/martinc/32/374731_2.png) [@MartinC](https://meta.discourse.org/u/MartinC)
#### Post date: [2024年三月29日 13:19 UTC](https://meta.discourse.org/t/how-to-fix-formatting-issues-markdown-badly-migrated-to-html/301493/1 "2024-03-29T13:19:35Z")

</div>

我们已成功从 [flarum.amybo.org](http://flarum.amybo.org) 迁移到 discourse [forum.amybo.org](http://forum.amybo.org)，但论坛现在充斥着格式问题。例如：

```plaintext
@\"Gerrit\"#p174 我喜欢水基液体（就像 Rabaey 的一样）的想法，所以我查看了 [Nutrisorb Trace Minerals](https://www.biocare.co.uk/nutrisorbr-liquid-trace-minerals-15ml) 的成分：
1. 纯净水，
2. 硼酸钠，
3. 防腐剂（柠檬酸），

```

变成了：

 ![Screenshot 2024-03-29 at 13.06.21](https://global.discourse-cdn.com/meta/original/4X/8/9/b/89b4f662f95239f85b834fde52f2286ac5a76949.png)

```plaintext
<r>
<p>
<POSTMENTION discussionid="25" displayname="Gerrit" id="174" number="8">@\"Gerrit\"#p174</POSTMENTION> I like the idea of a water based liquid (just like Rabaey's) so I checked out the <URL url="https://www.biocare.co.uk/nutrisorbr-liquid-trace-minerals-15ml"><s>[</s>Nutrisorb Trace Minerals](https://www.biocare.co.uk/nutrisorbr-liquid-trace-minerals-15ml)<s></s></URL> ingredients:
</p>
<LIST type="decimal">
<LI><s>1. </s>Purified Water, </LI>
<LI><s>2. </s>Sodium Borate, </LI>
<LI><s>3. </s>Preservative (Citric Acid), </LI>
</LIST>

```

有什么推荐的方法来修复这些问题吗？

如果能自动修复整个论坛（而不显示每个帖子的编辑记录），那将是最好的，但如果不行，那么半自动修复（我们可以逐个帖子应用）也比手动删除每个 HTML 标签以恢复到 markdown 要好。

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2024年三月29日 14:30 UTC](https://meta.discourse.org/t/how-to-fix-formatting-issues-markdown-badly-migrated-to-html/301493/2 "2024-03-29T14:30:00Z")

</div>

~~修复这些问题应该在你进行导入时进行。作为一个经常进行迁移的人，人们在论坛上线时出现格式错误是我最担心的事情之一。修复导入脚本会很容易，而现在论坛已经上线，事后修复会困难得多。当时可能只需要一两个小时，而现在则需要2-5倍的工作量。~~

是的，可以编写一个脚本来清理在线论坛上的内容，并且（令人担忧的是）不维护编辑（这样就不会有编辑，也不会有通知），或者进行编辑并告诉它不要顶帖/通知。我确定我以前做过。你会这样做：

```ruby
fixes = Post.where("raw like '%something broken%'")
fixes.each do |p|
   new_raw = p.raw.gsub!(some stuff)
   PostRevisor.new(p).revise!({raw: new_raw, edit_reason: 'post fixer!'}, {bypass_bump: true)
end

```

`raw` 是否包含所有这些 HTML？

---

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [2024年三月29日 14:34 UTC](https://meta.discourse.org/t/how-to-fix-formatting-issues-markdown-badly-migrated-to-html/301493/3 "2024-03-29T14:34:16Z")

</div>

我相信您可以使用 `posts:remap` rake 命令（请参阅 [Replace a string in all posts](https://meta.discourse.org/t/replace-a-string-in-all-posts/48729) 以了解如何操作）；您不应该使用该命令进行编辑。

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2024年三月29日 14:42 UTC](https://meta.discourse.org/t/how-to-fix-formatting-issues-markdown-badly-migrated-to-html/301493/4 "2024-03-29T14:42:52Z")

</div>

那个 rake 任务对于简单的替换来说是可以的，但很快就会变得笨拙。

---

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [2024年三月29日 14:47 UTC](https://meta.discourse.org/t/how-to-fix-formatting-issues-markdown-badly-migrated-to-html/301493/5 "2024-03-29T14:47:14Z")

</div>

您是什么意思？比如，如果您想管理复杂的正则表达式，那不实际？

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2024年三月29日 14:49 UTC](https://meta.discourse.org/t/how-to-fix-formatting-issues-markdown-badly-migrated-to-html/301493/6 "2024-03-29T14:49:36Z")

</div>

好的。您正在 Shell 中调用该任务，因此快速确定您是在转义 Bash、Ruby 还是正则表达式会变得困难或不可能。此外，看起来修复程序将不是简单的替换。

---

<div class="post-metadata">

### Author: ![MartinC](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/martinc/32/374731_2.png) [@MartinC](https://meta.discourse.org/u/MartinC)
#### Post date: [2024年三月29日 14:55 UTC](https://meta.discourse.org/t/how-to-fix-formatting-issues-markdown-badly-migrated-to-html/301493/7 "2024-03-29T14:55:38Z")

</div>

我是 Discourse 新手，但现在我找到了如何访问原始数据的方法，是的，它确实包含了所有的 HTML：  
[https://forum.amybo.org/raw/56/9](https://forum.amybo.org/raw/56/9)

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2024年三月29日 16:00 UTC](https://meta.discourse.org/t/how-to-fix-formatting-issues-markdown-badly-migrated-to-html/301493/8 "2024-03-29T16:00:20Z")

</div>

您是否使用了现有的 `flarum_import.rb` 脚本？我很难想象 flarum 的 `p.content` 字段（也就是导入脚本中的 `raw` 字段）中会有 HTML。我非常确定 flarum 使用的是 markdown，所以我不知道为什么你的 `raw` 字段里会有 HTML。或者也许脚本就是这么糟糕。

但是删除线是 HTML 中的内容。也许你只需要用 CSS 来修复它。

修复 `\u003cPOSTMENTION\u003e` 有点棘手，因为 Discourse 有引用，但没有提及。简单的解决方案是将其更改为简单的 `@${displayname}`（并希望用户名与导入前相同，或者在 `user_custom_fields` 中查找以找到更新后的用户名）。您还可以做的是包含一个链接，例如 `@mention said [here](/t/-/\u003cdiscourse ID for topic 25\u003e/\u003c8\u003e)`。

一个疯狂的解决方案是编写一个脚本，从 flarum 数据库中提取 markdown，并更新 raw 字段以包含它。它仍然需要一些清理（例如提及和 POSTMENTIONS），但它会修复很多东西。

另一个想法是冻结您的站点，批量删除所有导入的数据，修复导入脚本，然后重新运行它。

但是自从您迁移以来，您的新帖子不多，所以也许您可以以某种方式保存它们，在一个空的数据库上进行全新的导入，然后将它们添加回来。处理新用户会有点困难。

如果您有预算，可以联系我或在 #Marketplace 发布。

---

<div class="post-metadata">

### Author: ![MartinC](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/martinc/32/374731_2.png) [@MartinC](https://meta.discourse.org/u/MartinC)
#### Post date: [2024年三月29日 16:36 UTC](https://meta.discourse.org/t/how-to-fix-formatting-issues-markdown-badly-migrated-to-html/301493/9 "2024-03-29T16:36:38Z")

</div>

谢谢 Jay，我没有亲自进行迁移，所以不知道使用了哪个脚本。负责此事的成员目前患流感，但等他们回来后，我会将他们引荐到您这里精彩的建议。
