1
jugelizi 2020-02-07 21:18:11 +08:00 1
有个东西叫富文本编辑器 自定义配置
|
3
Sunyanzi 2020-02-07 22:03:17 +08:00 2
php 专门有个扩展做这个 ... php.net/tidy.repairstring 供参考 ...
|
4
imn1 2020-02-07 22:05:39 +08:00 1
这个比较难
例一 <a href=www>我很大 …… 上面少了</a> 这几行算不算已经闭合?如果不计算最后一行,那么</a>加在省略号前还是后才算正确? 例二 <div> <div></div> <div></div> 那么</div>加在哪一行? |
5
IDCFAN OP |
6
greed1is9good 2020-02-07 22:31:26 +08:00 via Android 1
一般只能做总体的数量检验吧,像好多语言的括号一样数量不成对就报错,无法编译,其实少了“<>”这两个个符号的任一个也很麻烦。。。
|
7
no1xsyzy 2020-02-07 23:10:57 +08:00 2
一种是构造出树再重新组合,还有一种邪道是显示时每个丢进 iframe。
但还是不建议允许用户使用 html (就怕自己某天偷懒 /后续维护者不懂,导致用户输入不过滤直接插 <script> 进网页里形成 XSS ),BBcode 或者 Markdown 都是不错的选择。 另外,不成对的尖括号如何处理? 〔由上式可知,b<a 〕 内容根本不是标签如何处理? 〔看这个:<https://www.v2ex.com/t/642852>〕 关于其是否是标签具有歧义的如何处理? 〔<ruby>明日<rp>(</rp><rt>Tomorrow</rt><rp>)</rp></ruby>〕 〔参考这本书:<ruby on rails tutorial>〕 |
8
hundan 2020-02-08 01:40:30 +08:00 2
拜托你找到解决办法之后分享出来
|
9
loading 2020-02-08 09:37:57 +08:00 3
既然找到个轮子就应该贴出来,以后别人遇到和你一样问题的时候,可以帮到他。
不然以后就没人会回答你的问题了。 请参阅《提问的智慧》 |
10
mostkia 2020-02-08 10:20:04 +08:00 1
试试 Ace Editor 编辑器吧,这玩意儿可以方便的集成到自己的项目中,功能很强大,你拿它甚至能在 web 页面里写出 IDE 来。
|
11
7gugu 2020-02-08 10:52:22 +08:00 via Android 1
你写成树之后,匹配一下吧
|
12
IDCFAN OP @hundan
@loading 其实我昨天就把这代码贴在回帖框里准备发一下,但是自己看不懂,只是自己感觉将就能用,也不知道这函数成熟不成熟,所以最终没发。既然大家说了,我就发一下,从 gayhub 扒下来的,大佬们顺便帮看看吧。其实感觉 3 楼 @Sunyanzi 用 PHP 扩展的方式更好,只是我比较菜,大概率不会弄。 function CloseTags($html) { $html = preg_replace('/<[^>]*$/', '', $html); preg_match_all('#<([a-z1-6]+)(?: .*)?(?<![/|/ ])>#iU', $html, $result); $opentags = $result[1]; preg_match_all('#</([a-z1-6]+)>#iU', $html, $result); $closetags = $result[1]; $len_opened = count($opentags); if (count($closetags) == $len_opened) { return $html; } $opentags = array_reverse($opentags); $sc = array('br', 'input', 'img', 'hr', 'meta', 'link'); for ($i = 0; $i < $len_opened; $i++) { $ot = strtolower($opentags[$i]); if (!in_array($opentags[$i], $closetags) && !in_array($ot, $sc)) { $html .= '</' . $opentags[$i] . '>'; } else { unset($closetags[array_search($opentags[$i], $closetags)]); } } return $html; } |