如何在语法高亮标记代码中标记搜索短语?

时间:2015-01-08 20:30:43

标签: css ruby-on-rails markdown redcarpet coderay

在我的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"
```

以下是搜索结果截图:

Search result screenshot

这是可以理解的,因为围栏代码块之后的匹配'ruby'被用于突出显示的span和类包装,但是markdown现在看到了

```<span class='highlighted'>ruby</span> 

并按原样输出范围。

在代码中也会出现类似的问题,代码中的匹配也会被搜索结果中的span包裹并输出。

如何避免这种情况,并让搜索突出显示输出的降价中的实际短语,最好不必保留降价的html输出?

1 个答案:

答案 0 :(得分:1)

您应首先将其转换为HTML,然后将其传递给highlight