首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gemoji破坏Kramdown的HTML

Gemoji破坏Kramdown的HTML
EN

Stack Overflow用户
提问于 2014-09-18 12:03:10
回答 1查看 141关注 0票数 0

为什么 克拉姆登氏 自动收费解析器在 感化 文本字段上运行时会中断?

对于[Test](http://google.com "Test"),我得到:

代码语言:javascript
复制
<a href="http://google.com &quot;Test&quot;">Test</a>

而不是预期的产出:

代码语言:javascript
复制
<a href="http://google.com" title="Test">Test</a>

Live:http://runnable.com/VAL1VuMjrGFur2yx/forem-gemoji-kramdown (见Test帖子)

application_helper.rb

代码语言:javascript
复制
def add_emojify_and_kramdown(text)
  raw(Kramdown::Document.new(emojify(text)).to_html)
end

[...snip...]

def emojify(text)
  h(text).to_str.gsub(/:([a-z0-9\+\-_]+):/) do |match|

    if emoji = Emoji.find_by_alias($1)
      '![' + $1 + '](' + asset_path("emoji/#{emoji.image_filename}") + ')'
    else
      match
    end
  end
end

一些补充信息:

  • raw(Kramdown::Document.new(text).to_html)返回预期的输出,但没有Gemoji
  • raw(emojify(text))不会改变任何东西,因为text不包含任何表情符号
  • raw(emojify(Kramdown::Document.new(text).to_html))返回预期的输出,但作为原始的HTML返回
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-18 12:23:54

emojify方法做的第一件事是h(text),它转义输入,转换

代码语言:javascript
复制
[Test](http://google.com "Test")

转到

代码语言:javascript
复制
[Test](http://google.com &quot;Test&quot;)

然后,Kramdown对这个字符串进行操作,由于它不再包含引号,所以它假定(...)的全部内容就是URL,从而产生:

代码语言:javascript
复制
<a href="http://google.com &quot;Test&quot;">Test</a>

要使它正常工作,只需放弃对htext.gsub(...的调用即可。如果这是外部数据,您可能需要考虑如何管理您的字符串安全。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25912116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档