Drupal中的搜索结果包括HTML实体。我怎样才能获得干净的输出?

时间:2011-06-09 13:55:49

标签: html search drupal entities

如何为搜索结果页面提供干净的html输出?每次我尝试包含像“&”这样的特殊字符时作为搜索词的一部分,我通常会得到“&”的结果突出显示还包括HTML实体。因此,结果有&,“等......这是截图示例 - http://min.us/mt3rOV5zVtOh6

同时,当我用“&”进行搜索时包含在搜索词中,结果会产生干净的输出。

search-result.tpl.php中的一段代码

http://pastebin.com/zCmMJLNh

我已经尝试了几种解码功能但没有成功。一直试图解决这个问题。该网站正在使用Drupal 6,搜索模块已被覆盖。

2 个答案:

答案 0 :(得分:1)

你说“...搜索模块已被覆盖”这可能是导致搜索片段在输出中保持htmlentity编码的原因(例如check_plain'd escaped html)

更好的解决方法是找到修改中的原因,例如修改搜索片段的预处理函数(如果有的话)

或者,您可以通过decode_entities

运行$ snippet

print decode_entities($snippet)

假设html已经被转义,好像没有,可能存在安全隐患。

另见:http://php.net/manual/en/function.html-entity-decode.php 并且:http://www.php.net/manual/en/function.htmlspecialchars-decode.php

答案 1 :(得分:0)

好吧,您可以尝试drupal_html_to_text将代码段转换为纯文本。

正确的方法可能是弄清楚为什么这些结果没有得到转换。根据您的评论,只有当您专门搜索“&”时才会出现问题。更具体地说,它是search.module中的正则表达式(/modules/search/search.module-6中的第1188行):

preg_match_all('/ ("([^"]+)"|(?!OR)([^" ]+))/', ' '. $keys, $matches);

它只匹配关键字之前的空格(而不是之后)。你可以在这里修改$ keys,如:

if ($keys == '&') $keys = '&'

或类似的东西(当然这意味着黑客攻击核心 - meh)。

您还可以通过模块添加form_alter并修改搜索表单(请参阅how to add the form_alter上的此链接)。然后你可以add a custom submit handler在提交之前改变表格中的搜索词。