作者banana2014 (香蕉共和国)
看板PHP
标题[问题] 关於标记出指定字串的问题
时间Sat Jun 6 21:22:52 2015
我希望用PHP来标记(highlight)出指定的字串,其中当遇到「HTML实体」时要特别小心,
因为当指定的字串($search_txt)是分号(;)时,可能连HTML实体的末端字元也会一起被标
到,而这不是我想要的结果,於是我自己写了以下的程式:
http://www.red-whale.com.tw/test/PHP-test/index.phps
发现还挺不赖的,但是摸到最後还是发现的一些问题:
当$search_txt="a&ffg";时,理应要在content中间highlight出该字串出来,但是它
却没有标出来。我原先的步骤是:先将HTML实体以外的字串拆开成许多小节(分散在阵列
中),在各小节搜寻并highlight含有$search_txt的字串。再来将各节的HTML实体一一拿出
来检验是否与$search_txt相等(因为$search_txt本身也有可能是一个HTML实体),若有也
highlight它。但万万没想到还有一个case,那就是若$search_txt当中若同时含有HTML实
体和其他字元那该怎麽办? 这就让我头大了,请各位帮帮我怎麽解决这个问题,谢谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 219.80.136.111
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1433596975.A.8AF.html
1F:→ banana2014: 注:content里的内容都已经事先htmlspecialchars了 06/06 21:29
2F:推 LPH66: 我觉得你要反过来想, 你要标示的是显示出来的字串 06/07 03:58
3F:→ LPH66: 那麽你应该要先解掉 htmlspecialchars 再做搜寻 06/07 03:58
4F:→ LPH66: 或者如果你有原始字串的话, 先标出来再上 htmlspecialchars 06/07 04:01
5F:→ banana2014: 但是程式如果先标记再做htmlspecialchars的话,连 06/07 09:46
6F:→ banana2014: <font color=red><b>...</b></font>这些标签也会被一 06/07 09:47
7F:→ banana2014: 并转换成HTML实体,所以顺序上是不能改变的 06/07 09:48
8F:→ Darkland: 如果 search_txt 也是已经 htmlspecialchars 的状态了 06/07 17:29
9F:→ Darkland: 直接用一行 str_replace 会有什麽问题吗@@ 06/07 17:30
10F:→ banana2014: 当$content="abc&ggf";且$search_txt="mp;ggf"时 06/07 19:12
11F:→ banana2014: 照理来说不应该做任何标记(因为显示出来的画面结果第 06/07 19:14
12F:→ banana2014: 一个变数($content)会是:「abc&ggf」,而第二个变数 06/07 19:15
13F:→ banana2014: ($search_txt)会是:「mp;ggf」,显然第一个变数字串 06/07 19:16
14F:→ banana2014: 没有包含第二个变数字串),但是如果用str_replace的话 06/07 19:17
15F:→ banana2014: 就会变成「mp;ggf」标红字了,整体的HTML码会变成「 06/07 19:22
16F:→ banana2014: abc&a<font color=red><b>mp;ggf</b></font>」,而这 06/07 19:23
17F:→ banana2014: 不是我想要的结果 06/07 19:23
18F:→ banana2014: 总而言之,把HTML实体看作是一个字,不要被其他片段的 06/07 19:26
19F:→ banana2014: 字一起给标记住了 06/07 19:26
20F:→ bibo9901: 先html_entity_decode? 06/07 21:02