今天遇到一个内容翻页截取问题: 正文是用富文本编辑器写入的,编辑器上有个分页按钮,点击之后就往当前光标位置插入一个蓝色的


横线。然后php直接存入数据库。显示的时候,用 explode 函数根据这个


标记来分成一个数组,然后根据当前页码来显示某个片段。 但是有个严重的问题,比如富文本编辑器写入:

content of page 1


page 2 content

如果用explode函数分开后,

第一页的内容是

content of page 1

第二页的内容是:

page 2 content

这样就产生了没有闭合的标签,直接显示到页面上面就会破坏页面布局。。。

想了很久,也找了网上很多 closetag函数。但是发现都针对第一页那种没有闭合的标签的闭合。对于第二种没有开头的标签就没办法了。

针对第一页那种没有闭合的标签的闭合的closetags方法是:

function closetags($html) {

// 不需要补全的标签

$arr_single_tags = array(‘meta‘, ‘img‘, ‘br‘, ‘link‘, ‘area‘);

// 匹配开始标签

preg_match_all(‘##iU‘, $html, $result);

$openedtags = $result[1];

// 匹配关闭标签

preg_match_all(‘#([a-z]+)>#iU‘, $html, $result);

$closedtags = $result[1];

// 计算关闭开启标签数量,如果相同就返回html数据

$len_opened = count($openedtags);

if (count($closedtags) == $len_opened) {

return $html;

}

// 把排序数组,将最后一个开启的标签放在最前面

$openedtags = array_reverse($openedtags);

// 遍历开启标签数组

for ($i = 0; $i < $len_opened; $i++) {

// 如果需要补全的标签

if (!in_array($openedtags[$i], $arr_single_tags)) {

// 如果这个标签不在关闭的标签中

if (!in_array($openedtags[$i], $closedtags)) {

// 直接补全闭合标签

$html .= ‘‘ . $openedtags[$i] . ‘>‘;

} else {

unset($closedtags[array_search($openedtags[$i], $closedtags)]);

}

}

}

return $html;

}

后来想了一个办法,利用浏览器自己的html解释引擎来帮助补全有问题的html片段。具体做法如下:

var div = document.createElement(‘div‘);

div.innerHTML =‘<?php echo ("

这里是被截取的html片段");?>‘;

document.write(div.innerHTML);

原理就是先把html片段写入到一个空的div里面,然后再从这个div里面读取出来。别看写入和读取的属性都是innerHTML,写入的内容和得到的内容是不一样的噢。如果写入不完整的html片段,浏览器会自动补全修正。读取出来的时候就已经是完整的html dom 片段了。

可是这样有个弊端,由于是Js加载内容信息的,会对搜索引擎优化不好。

原文:http://www.jb51.net/article/31437.htm

php html补全,PHP实现HTML标签自动补全代码相关推荐

  1. Vue--template标签--自动补齐

    Vue中template里面的模板字符串输入标签自动补齐 一.打开 VScode 中设置 或点击左下角齿轮(设置图标)点击设置. 二.首先在输入框输入 settings.json 然后点击在setti ...

  2. vim补全html标签,vim括号引号html标签自动补全

    (我现在已经不用下面方法了,可使用 xptemplate插件 http://blog.csdn.net/zcube/article/details/42525973) 问题:怎样在vim中实现花括号引 ...

  3. vscode html自定义标签自动补全,vscode代码编辑器的html标签自动补全如何设置

    Vscode是微软推出的一款优秀的ide开发工具,界面简洁美观.默认支持中文,拥有丰富的插件,支持Windows,OS X和Linux.内置JavaScript.TypeScript和node.js支 ...

  4. centos mysql自动补全_MyCLI :一个支持自动补全和语法高亮的 MySQL/MariaDB 客户端

    MyCLI 是一个易于使用的命令行客户端,可用于受欢迎的数据库管理系统 MySQL.MariaDB 和 Percona,支持自动补全和语法高亮.它是使用 prompt_toolkit 库写的,需要 P ...

  5. linux 函数自动补全,Shell脚本中实现自动补全功能

    对于Linuxer来说,自动补全是再熟悉不过的一个功能了.当你在命令行敲下部分的命令时,肯定会本能地按下Tab键补全完整的命令,当然除了命令补全之外,还有文件名补全. Bash-completion ...

  6. esplise自定义快捷代码补全_Ecplise更便捷的自动补全功能设置及改良

    最近遇到了一些需要用搜索引擎解决的问题,在专栏里我一般不会放出来,不会像CSDN那样将几十个人把一个答案复制到自己的CSDN下,我尽量不去污染搜索结果和影响有问题需要解决的人的体验 比如困扰我的一个问 ...

  7. vim插件自动补齐_(转)Vim自动补全神器:YouCompleteMe

    原文出处:http://blog.jobbole.com/58978/ 第一次听说这个插件还是在偶然的情况下看到别人的博客,听说了这个插件的大名.本来打算在实训期间来完成安装的,无奈网实在不给力,也就 ...

  8. vscode添加标签自动补全

    File>Preferences>Settings 路径打开 settings.json 文件(或如下),添加如下配置 在用户设置添加 "emmet.includeLanguag ...

  9. vscode jsx html补全,VScode设置jsx语法自动补全

    Python小练习二 # 以正确的宽度在居中的"盒子"内打印一个句子 # 注意,整数除法运算符(//)只能用在Python 2.2及后续版本,在之前的版本中,只使用普通除法(/) ...

最新文章

  1. NoDrives-显示与隐藏驱动器【盘符的显示与隐藏】
  2. 磁盘阵列介绍、进程的查看管理、日志文件的查看分析,systemctl的控制
  3. Javascript中的0,false,null,undefined,空字符串对比
  4. wxPython多线程界面卡死或在不同平台崩溃问题
  5. 由Effiproz DataBase来看.NET开源数据库发展
  6. springboot开启redis共享session设置过期时间
  7. android service中显示一个dialog
  8. HTML5之webSocket使用
  9. 杭电1108java_按照这个步骤来刷题,迷茫的你两个月亦能成为王者
  10. JQUERY1.9学习笔记 之内容过滤器(三) has选择器
  11. 清华AI的华山论剑现已开启,不服就来战!王小川楼天城唐文斌都曾搅动风云...
  12. UITextField 对比 UITextView
  13. 怎么在堆叠柱状图中体现百分比_微生物门类堆叠柱状图一文解决
  14. 设置html字体大小 js,js如何改变文章的字体大小
  15. python 三维曲线拟合_python实现三维拟合的方法
  16. 鹏业安装算量软件安装流程
  17. Unity3D 自由视角代码之解析
  18. YOLOX训练自己的数据集(VOC)
  19. python正则表达式:re库的使用
  20. Beyond compare添加插件

热门文章

  1. 用单链表实现栈及操作
  2. TCP/IP协议(三次握手)
  3. 对Linux系统中的时钟和时间的探讨
  4. 众方网络电话VOIP FREEGO EIS系统命令
  5. VirtualBox中为WinXP虚拟机添加主体机共享
  6. golang map 存储函数
  7. golang mysql 错误 sql: unknown driver “mysql“ (forgotten import?) 解决方法
  8. linux conntrack命令 路由连接 跟踪表 显示删除监听记录
  9. golang 结构体简介
  10. linux redis WARNING overcommit_memory is set to 0! 解决方案