如何为搜索结果页面提供干净的html输出?每次我尝试包含像“&”这样的特殊字符时作为搜索词的一部分,我通常会得到“&”的结果突出显示还包括HTML实体。因此,结果有&,“等......这是截图示例 - http://min.us/mt3rOV5zVtOh6
同时,当我用“&”进行搜索时包含在搜索词中,结果会产生干净的输出。
search-result.tpl.php中的一段代码
我已经尝试了几种解码功能但没有成功。一直试图解决这个问题。该网站正在使用Drupal 6,搜索模块已被覆盖。
答案 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在提交之前改变表格中的搜索词。