在我的rails博客应用程序中,我可以创建post body markdown(我使用redcarpet进行markdown解析,使用CodeRay进行语法高亮显示)。
我有一个搜索页面,它返回包含搜索查询字符串的帖子。
我使用rails helper突出显示查询:
@post.body = highlight(@post.body, @query_phrase, highlighter: '<span class=\'highlighted\'>\1</span>'))
我使用css在突出显示的类中将背景设置为黄色。
帖子正文按照输入的方式存储在textarea中(作为markdown,未转换),并且在渲染只读视图(如帖子#show和搜索结果)时处理降价。
问题是,当我搜索“ruby”这个词时,输入的markdown使用带语言名称的屏蔽代码块进行语法高亮显示,搜索结果搞砸了。
这是身体降价:
ruby
```ruby
puts "Hello, world"
```
以下是搜索结果截图:
这是可以理解的,因为围栏代码块之后的匹配'ruby'被用于突出显示的span和类包装,但是markdown现在看到了
```<span class='highlighted'>ruby</span>
并按原样输出范围。
在代码中也会出现类似的问题,代码中的匹配也会被搜索结果中的span包裹并输出。
如何避免这种情况,并让搜索突出显示输出的降价中的实际短语,最好不必保留降价的html输出?
答案 0 :(得分:1)
您应首先将其转换为HTML,然后将其传递给highlight
。