整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

手把手教你建立私人数据检索库(二)

手把手教你建立私人数据检索库(二)

创:青空酱合天智汇

原创投稿活动:

http://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/Nw2VDyvCpPt_GG5YKTQuUQ

---你可曾听过社工库的传说?

声明:本文介绍的安全工具仅用于渗透测试及安全教学使用,禁止任何非法用途

0x00 序言:

咳咳,这里是青空酱。本次为大家带来《手把手教你建立私人数据检索库》系列第二讲之数据的清洗导入与配置。对之前教程还不熟悉的读者可以查看上期文章以流畅的食用本文。

往期文章回顾

:http://mp.weixin.qq.com/s?__biz=MjM5MTYxNjQxOA==&mid=2652851659&idx=1&sn=7e2f574ab9dbbd3c2ae58b9c81e986d4&chksm=bd5931068a2eb810113d07da86e8e391caa60ad4e7171f2d522a9501d2698dbc6b7f71d9c0af&scene=21#wechat_redirect

言归正传,本讲分为几个以下部分:

  1. sphinx相关配置文件的介绍讲解
  2. 数据的导入,清洗与维护
  3. 索引生成实操及测试索引

请各位系好安全带,青空酱要发车啦!

最后还请大家持续关注本教程(毕竟我也不是什么鸽子)

0x01 Sphinx配置讲解:

上回我们讲到了sphinx的安装配置,接下来将在这里讲解下相关配置文件。

首先,使用sphinx查询数据的流程如下:

?

  1. Sphinx事先生成数据库的全文索引(将索引与数据的id一一对应)
  2. 后端向Sphinx监听服务发送查询关键字获取相关索引记录,即对应的数据库数据id
  3. 后端取得数据id后再向数据库发送查询请求获取信息
  4. 后端将信息返回前端渲染

大致流程介绍完了相比大家对于整个查询过程有了更深一层的理解,也方便进行进一步的讲解。

先放个官方的查询模板方便讲解,随后放本次搭建所用的模板。

索引模板:

source sphinx

{

type=mysql

sql_host=192.168.1.1

sql_user=test 数据源连接信息

sql_pass=test

sql_db=sphinx //数据库名字

sql_port=3306 //数据库库端口号

sql_query_pre=SET NAMES utf8 //设置连接字符集

sql_query=SELECT id, title, post_id, user_id,UNIX_TIMESTAMP(dated) as dateline \

FROM test //最重要的部分嗷

sql_attr_uint=post_id

sql_attr_uint=user_id

sql_attr_timestamp=dateline 属性字段

}

index sphinx_idx //索引名

{

source=sphinx //这里与上面的source对应

path=/usr/local/coreseek-3.2.14/ var/data/sphinx //索引要存放的位置

docinfo=extern

charset_type=zh_cn.utf-8

charset_dictpath=/usr/local/coreseek-3.2.14/dict/ //字符集文件存放位置

html_strip=0

}

indexer

{

mem_limit=512M //用来构建索引的索引器运行所占用的内存

}

searchd

{

port=9351 //不要被占用哦 netstat -anop|grep 9351 查询服务监听的端口

log=/usr/local/coreseek-3.2.14/ var/log/search_sphinx.log

query_log=/usr/local/coreseek-3.2.14/ var/log/query_sphinx.log //相关日志的存放位置

read_timeout=5

max_children=30

pid_file=/usr/local/coreseek-3.2.14/ var/searchd_sphinx.pid

max_matches=10000 //返回的最大数据量

seamless_rotate=1

preopen_indexes=0

unlink_old=1

}

......

有点懵? 先介绍这几个概念:

  • source:数据源,数据是从什么地方来的。如Postgresql或Mysql
  • index:索引,当有数据源之后,从数据源处构建索引。索引实际上就是相当于一个 缓存字典。有了整本字典内容以后,才会有字典检索。
  • searchd:提供搜索查询服务进程。它一般是以deamon的形式运行在后台的。
  • indexer:构建索引的服务。当要重新构建索引的时候,就是调用indexer这个服务。
  • attr:属性,属性是存在索引中的,它不进行全文索引,但是可以用于过滤和排序。

Sphinx集轻量化与高拓展性与一体,相关配置可研究的东西很多,这里贴一下配置文件全解析,有兴趣的读者下去自行研究。

https://www.cnblogs.com/yjf512/p/3598332.html

贴下我自己的配置:

source data1

{

type=mysql

sql_host=localhost

sql_user=user

sql_pass=password

sql_db=sgk

sql_port=3306

sql_query_pre=SET NAMES utf8

sql_query=SELECT `id`,`username`, `email` FROM data1 #sql_query第一列id需为整数,username、password、email等作为字符串/文本字段,被全文索引

sql_attr_uint=id #从SQL读取到的值必须为整数

#sql_field_string=username

#sql_field_string=password

#sql_field_string=email

#sql_attr_timestamp=date_added #从SQL读取到的值必须为整数,作为时间属性

sql_query_info=SELECT `id`, `username`, `password`, `email`, `salt` FROM data1 WHERE id=$id #命令行查询时,从数据库读取原始数据信息

}

#index定义

index data1

{

source=data1 #对应的source名称

path=/usr/local/sphinx/var/data/data1 #请修改为实际使用的绝对路径,例如:/usr/local/sphinx/var/...

docinfo=extern

mlock=0

morphology=none

min_word_len=1

ondisk_dict=1 #索引不载入内存而是保存在硬盘上

#这个选项很重要 一定要把索引保存在硬盘,否则索引出的海量数据会充满整个内存

html_strip=1

}

#全局index定义

indexer

{

mem_limit=754M

}

#searchd服务定义

searchd

{

listen=9312

read_timeout=5

max_children=30

max_matches=1000

seamless_rotate=0

preopen_indexes=0

unlink_old=1

pid_file=/usr/local/sphinx/var/log/searchd_mysql.pid #请修改为实际使用的绝对路径,例如:/usr/local/sphinx/var/...

log=/usr/local/sphinx/var/log/searchd_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/sphinx/var/...

query_log=/usr/local/sphinx/var/log/query_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/sphinx/var/...

binlog_path=#关闭binlog日志

}

0x02 数据导入,清洗与维护:

本教程以Mysql数据源为例。

首先创建数据库:

Create database sgk;

?

?

接着创建表:

数据库的表结构如下:

?

其实还可以加上一个’from’字段,用于记录数据的泄露来源,这里我没有设置。

表的字段主要为id,email,username,password,salt等,id即为数据对应编号,email为邮箱,username用户名,password为对应密码,salt一般为空,存在salt时可以写入。

注意:id的类型一定要写到unsigned或大整数等,因为数据量上去了可能会有数亿条。这里还有个坑之后会讲。而其他字段的类型最好设置为VARCHAR,毕竟数据中可能会有一些奇奇怪怪的字符。

先创建一个表data1,后续可能会有data2,data3...依数据量定。

创建命令

CREATE TABLE IF NOT EXISTS `data1`(

`id` INT UNSIGNED AUTO_INCREMENT,

`email` VARCHAR(255) NOT NULL,

`username` VARCHAR(100) NOT NULL,

`password` VARCHAR(40) NOT NULL,

`salt` VARCHAR(40) NOT NULL,

`from` VARCHAR(40) NOT NULL,

PRIMARY KEY ( `id` )

)ENGINE=MyISAM DEFAULT CHARSET=utf8;

数据库结构这边准备好后,我们来讲讲数据的导入与清洗。

推荐两款工具:

  1. Navicat for Mysql 强大而操作简易的图形化工具,不多解释.
  2. Mysqlimport Mysql工具集自带的工具,命令行配置,灵活度高,在导入数据速度方面具有显著优势。

Navicat可自行去官网下载。

通常,泄露的数据格式会像这样:

(注: 本文所展现的所有数据均为机器随机生成,仅供教学)

?

这是最简单且最好处理的一类数据,遇到就偷着乐吧hhhhhhh

使用Navicat导入:

?

?

?

使用mysqlimport导入:

mysqlimport -u root -p --local --fields-terminated-by="" --lines-terminated-by="\r\n" sgk C:\Users\Administrator\Desktop\data1 --columns=username,password,email

参数详解:

?

?

--columns后字段名依次与数据表中的字段对应

最终效果:

?

下面介绍几种较难处理的数据格式及清洗方法:

在清洗大文本数据时因为占用过高而无法直接打开查看,那么我们可以先取出一定样本进行分析。

比如head/tail命令便可从文本中取出前/后N行文本。

?

那么其实自己可以写一个脚本,将数据取样和mysqlimport操作执行自动化

类似这样的数据:

brucebook1----b63a795----brucebook@qq.com

lxaixy13----b894a74----lxaixy13@qq.com

brucebook----26890de----lanse123@qq.com

gwjgwjgwj----c34a8b2----gds871214@vip.qq.com

leelight----ab00021----leeguangzhu@qq.com

可以这么写:

mysqlimport -u root -p --local --fields-terminated-by="----" --lines-terminated-by="\r\n" sgk C:\Users\Administrator\Desktop\data1 --columns=username,password,email

数据清洗及导入就介绍到这里,关于数据维护由于篇幅限制我们放在下节讲。

0x03 测试索引查询效果:

1.建立索引:

/usr/local/coreseek/bin/indexer -c {最好配置文件绝对路径} {索引名字}

检查索引数据是否ok

2.启动索引服务

/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/sphinx.conf -i sgk

3.查看命令用法

/usr/local/coreseek/bin/search

4.直接搜索:

/usr/local/coreseek/bin/search -c {最好配置文件绝对路径} {索引名字}{搜索词}

1

demo:搜索一个词测试

5.索引重建

/usr/local/coreseek/bin/indexer --config /usr/local/coreseek/etc/project/sphinx.conf sgk --rotate 1

6.增量索引使用

/usr/local/coreseek/bin/indexer --config /usr/local/coreseek/etc/project/sphinx.conf sgk_merge --rotate

1

7.合并索引跟增量索引

/usr/local/coreseek/bin/indexer --config /usr/local/coreseek/etc/project/sphinx.conf --merge sgk_idx sgk_merge --rotate

0x04 结语:

本节教程就介绍到这里,介绍了索引引擎的配置文件与索引的建立,数据导入清洗相关的知识,希望大家有所收获。到目前为止,我们的私人数据查询系统就大概成形了,已经可以进行关键词的查询任务,下一步便是构建查询应用前后端,将数据完整且优雅的展现于眼前。之后如何,敬请期待下节课程。

渗透测试工程师岗位技能学习

岗位介绍:

渗透测试是通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法,渗透测试工程师利用各种手段对某个特定网络进行测试,以期发现和挖掘系统中存在的漏洞,然后输出渗透测试报告,并提交给网络所有者。网络所有者根据渗透人员提供的渗透测试报告,可以清晰知晓系统中存在的安全隐患和问题。

课程学习:

本岗位课程学习包括6章23小节134个实验,点击“http://www.hetianlab.com/pages/newPostSystem.jsp?channelID=zhihu”开始学习!

声明:笔者初衷用于分享与普及网络知识,若读者因此作出任何危害网络安全行为后果自负,与合天智汇及原作者无关,本文为合天原创,如需转载,请注明出处!

nfoQ 热门话题

1.继美光之后,SK海力士宣布明年资本支出减半,全球存储芯片市场暴跌幅度惊人
https://www.infoq.cn/article/4IfbhjAHEF3RI4kpS9Xt

2.Webpack 创始人推出比Webpack“快700倍”的Turbopack,基于Rust编写
https://www.infoq.cn/article/iKecr1k4eQMMpCaaXEDr

3.云原生图数据库在西门子成都工厂的数智化运营实践
https://www.infoq.cn/article/f59Vdt8BZvUs1W4gYyQN

4.企业应用开发需求激增,低代码的价值和风险都不可忽视
https://www.infoq.cn/article/UdGTsgRmdWEUxMxV3Aii

5.人群圈选效率提升 30 倍,云积互动基于 Apache Doris 构建统一数仓的实践
https://www.infoq.cn/article/PiUelj8v3KdWhylRMZx6

6.微软:GitHub年收入达10亿美元,拥有9千万活跃用户
https://www.infoq.cn/article/1s4tJwDHpM5zTbeScaRI

7.估值从3600亿缩水到1200亿,英特尔自动驾驶掌上明珠Mobileye的“灾难性”上市
https://www.infoq.cn/article/juifybjFERQvkbNCV8GL

8.从零开始构建业务异常检测系统,FreeWheel面临过的问题和解决方案
https://www.infoq.cn/article/VNuFLZeLmv0iDEJB06OD

9.谷歌、微软发布最新财报:营收持续增长,但利润萎缩
https://www.infoq.cn/article/ev51N1uqoPPp8iPdaieu

10.Error Prone 通过检测常见错误帮助改善Java代码
https://www.infoq.cn/article/lpOyO0ClfYLGmmakS3is

博客园新闻

1.靠AI六小时开发游戏Demo,剧本绘画配音全包,网友:新概念3A大作
https://news.cnblogs.com/n/730540/

2.「多语言图像描述」最强评估基准XM3600来了!涵盖36种语言
https://news.cnblogs.com/n/730541/

3.ECCV 2022商汤斩获70篇论文
https://news.cnblogs.com/n/730539/

4.ECCV 2022开奖!清华、浙大校友斩获最佳论文奖
https://news.cnblogs.com/n/730538/

5.让人啼笑皆非的机器人翻车现场,揭示了多少行业真相?
https://news.cnblogs.com/n/730537/

6.美团外卖在香港,还能“送啥都快”吗?
https://news.cnblogs.com/n/730536/

7.小鹏飞行汽车,怎么成了“缝合怪”
https://news.cnblogs.com/n/730535/

8.自动驾驶企业Mobileye上市:市值167亿美元 路演PPT曝光
https://news.cnblogs.com/n/730534/

9.iMessage聊天不舒服、橙色暗示买买买,这是苹果、淘宝的颜色“小心机”
https://news.cnblogs.com/n/730533/

10.小米360们,靠什么撑起体面
https://news.cnblogs.com/n/730532/

11.字节低估了元宇宙社交
https://news.cnblogs.com/n/730531/

12.淘宝一定要抢罗永浩和俞敏洪
https://news.cnblogs.com/n/730530/

13.腾讯光子工作室举办内部AI绘画大赛,游戏巨头的正规军要进场?
https://news.cnblogs.com/n/730529/

14.中国公有云服务市场报告出炉,腾讯云继续稳居第二
https://news.cnblogs.com/n/730528/

15.米哈游地推太猛:PC云原神发力,韩快闪店吸引2万玩家,日本办电竞比赛
https://news.cnblogs.com/n/730527/

16.火星表面下可能有古代细菌
https://news.cnblogs.com/n/730526/

17.蔚来国际业务总部项目落户上海嘉定
https://news.cnblogs.com/n/730524/

18.气候变化如何影响人类
https://news.cnblogs.com/n/730523/

19.电子烟“成烟”
https://news.cnblogs.com/n/730525/

20.猫咪能区分对它们和其他人类的呼叫
https://news.cnblogs.com/n/730522/

36氪新闻

1.最前线 | 药明康德三季报:单季度营收首次超过100亿元
https://www.36kr.com/p/1974595372818820

2.老产品全线上云,微软云的增长戏法
https://www.36kr.com/p/1974515949052292

3.美团到家事业群招募香港工作人员,或将筹备外卖业务试点
https://www.36kr.com/p/1974556486509192

4.罗森在上海开了一家无人便利店,消费者能习惯“拿了就走”吗?
https://www.36kr.com/p/1974553316155778

5.个人电脑需求疲软拖累微软,云计算增速放缓致净利大幅下滑
https://www.36kr.com/p/1974551726842240

6.唐唯实与中国市场的“断舍离”
https://www.36kr.com/p/1974541294903936

7.6个月拉锯战即将落幕?传闻马斯克承诺本周五前完成440亿美元收购推特
https://www.36kr.com/p/1974296468021891

8.资本减持零售业
https://www.36kr.com/p/1974538005225863

9.李佳琦之外,今年双11达人直播还有哪些值得说?
https://www.36kr.com/p/1974527715664518

10.中餐江湖刮起上市旋风
https://www.36kr.com/p/1974535560045192

11.复活的众泰正准备去海外市场割韭菜,它的前辈却要破产了
https://www.36kr.com/p/1974533304935049

12.有关汽水音乐的未来,这几点建议值得听一听
https://www.36kr.com/p/1974493862650245

13.PC上的这个“贵族接口”,究竟还有未来吗
https://www.36kr.com/p/1974473078186625

14.结婚人数屡创新低,酒店的婚庆生意更加难做了?
https://www.36kr.com/p/1974530453610880

15.丰田全新电动车,核心来自比亚迪
https://www.36kr.com/p/1974527846506888

16.东方财富暴跌50%之后
https://www.36kr.com/p/1974519726252423

17.茅台砍掉200个子品牌,丁雄军的跨界“阳谋”
https://www.36kr.com/p/1974509243695876

18.破发的万物云,为何估值逻辑失效?
https://www.36kr.com/p/1974484290920839

19.“罗永浩们”入淘:出名靠流量,成交靠淘宝
https://www.36kr.com/p/1974454111773319

20.被三大品牌扫地出门,侃爷凉凉
https://www.36kr.com/p/1974483417588358

21.定制家居再洗牌,尚品、索菲亚谁的麻烦更大?
https://www.36kr.com/p/1974500496712324

22.手机厂商不再负责更新,谷歌要亲自维护安卓Go
https://www.36kr.com/p/1974472853299586

23.CFO杨若离职只是表象,战略飘忽不定才是耽误小红书的根源
https://www.36kr.com/p/1974498738839943

24.苹果要给App Store加广告位,为何避开国内市场
https://www.36kr.com/p/1974472360157830

25.逃离风向的“僵尸青年”
https://www.36kr.com/p/1974479594267267

26.阿迪达斯丢了“椰子”
https://www.36kr.com/p/1974476090729094

27.双11最后一块流量洼地,品牌应该怎么用好视频号?
https://www.36kr.com/p/1974453266047366

28.1024,一年一度吐槽小鹏大赛
https://www.36kr.com/p/1974438131368713

29.小鹏飞行汽车,怎么成了“缝合怪”
https://www.36kr.com/p/1974444740829827

30.折叠屏手机火了,又好像没火
https://www.36kr.com/p/1974438406095624

31.让人啼笑皆非的机器人翻车现场,揭示了多少行业真相?
https://www.36kr.com/p/1974461031801224

32.2022宠物食品市场报告:猫经济当道,功效零食猛增长
https://www.36kr.com/p/1974425027757057

33.欧美天然气价格一度跌入负值,怎么回事?
https://www.36kr.com/p/1974421096596489

34.被“偷家”的抖音,再战双11
https://www.36kr.com/p/1974414456430981

35.“开一家水果店,尝尽人间疾苦”
https://www.36kr.com/p/1974430216528259

36.如何成为一名优秀的产品经理?只需要这几种能力
https://www.36kr.com/p/1974389638578944

37.日均3500万票的中国邮政,追上顺丰通达系快递还差多远?
https://www.36kr.com/p/1974383660573315

38.基金三季报速览:张坤抄底腾讯,萧楠却减了仓
https://www.36kr.com/p/1974415688540544

39.合肥高科IPO成功过会:专注家用电器专用配件,背靠海尔年收入逾8亿
https://www.36kr.com/p/1974425872286464

40.圆心科技第三次冲刺港股上市,有腾讯加持为啥还是这么不容易?
https://www.36kr.com/p/1974409791652613

41.老板想要在非洲卖巧克力,营销人必须知道的3种营销策略
https://www.36kr.com/p/1974388108026502

42.从质疑极氪009宣传图造假,到最终删除微博,李想与吉利副总的“高能”互动都在这了
https://www.36kr.com/p/1974357088772489

43.上一财年支出是收入的5倍,Edtech独角兽以4000万美元收购线下培训机构,寻求增加收入
https://www.36kr.com/p/1974410358235522

44.年入12亿,“脏”上热搜的杨国福,不靠卖麻辣烫赚钱
https://www.36kr.com/p/1974386304475522

45.为什么和伴侣同居后,男生们的居家能力大幅提升?| 2022年轻人居家报告
https://www.36kr.com/p/1974398781694601

46.国际航班数量增一倍,票价降两成
https://www.36kr.com/p/1974410467582594

47.从“避风港”变成“众矢之的”,谷歌做错了什么?
https://www.36kr.com/p/1974407300981380

48.早期项目丨拥有万亿级市场应用前景,「中科微智」通过微生物组干预促进儿童生长发育
https://www.36kr.com/p/1964356398688518

49.阿迪和侃爷割席:仇恨言论和一个时代的公关灾难
https://www.36kr.com/p/1974402318770562

50.等等,你口中的“动漫”,究竟是什么意思?
https://www.36kr.com/p/1974390586433922

开源中国资讯

1.PHP 8.3 的第一个决议:内置 JSON 验证函数
https://www.oschina.net/news/215074

2.FydeOS v15.1 更新上线,有诸多小彩蛋等着你
https://www.oschina.net/news/215070

3.开源 API 管理工具 v1.8.0 发布,数据上云,API 团队协作
https://www.oschina.net/news/215065/eoapi-1-8-0-released

4.实现自托管后,Zig 的下一步是什么?
https://www.oschina.net/news/214994/zig-self-hosted-now-what

5.Linus 认为是时候从内核移除对 i486 CPU 的支持
https://www.oschina.net/news/214989/intel-i486-linux-possible-drop

6.谷歌 Chrome 将于 2023 年 2 月停止支持 Windows 7/8.1
https://www.oschina.net/news/214988/google-chrome-sunsetting-support-windows-7-8-1

7.Keka:macOS 平台的解压缩工具
https://my.oschina.net/u/3859945/blog/5560595

8.Chrome 107 正式发布
https://www.oschina.net/news/214986/chrome-107-released

9.如何解读“后 Hadoop 时代”?
https://www.oschina.net/event/2327198

10.OSCHINA 2022 中国开源开发者问卷
https://wj.qq.com/s2/11022804/f3c0/

11.拒绝 “ghs”,约会软件开源 “色图” 识别 AI
https://www.oschina.net/news/214983/bumble-open-source-private-detector

12.Next.js 13 带来比 Webpack 快 700 倍的打包器:Turbopack
https://www.oschina.net/news/214982/nextjs-13-released

13.Ubuntu 22.10 正式支持 Sipeed 的 LicheeRV RISC-V 开发板
https://www.oschina.net/news/214981/ubuntu-on-sipeeds-licheerv-risc-v-board

14.Play with Docker —— 在线 Docker 练习平台
https://www.oschina.net/p/play-with-docker

15.Gitee 推荐 | 轻量级 Windows 平台客户端开发框架 SOUI 4
https://gitee.com/setoutsoft/soui4

16.每日一博 | 分布式 ID 生成服务的技术原理和项目实战
https://my.oschina.net/u/4939618/blog/5585451

17.IHP 1.0 正式发布,开箱即用的 Haskell Web 框架
https://www.oschina.net/news/214973/ihp-1-0-released

Elastic日报 第1519期 (2022-10-26)

1.不同的查询词项对 ES 的影响(需要梯子)
https://medium.com/@raaj.akshar/performing-search-for-different-word-variants-in-elasticsearch-bd5c37ce4778

2.Html 内容清洗的一个 ingest(需要梯子)
https://medium.com/@andre.luiz1987/ingest-pipelines-html-strip-processor-elasticsearch-dd125f9ea640

3.type 类型的使用(需要梯子)
https://medium.com/@andre.luiz1987/tips-version-field-type-elasticsearch-1a8bf5527169

HP默认的函数有移除指定html标签,名称为strip_tags,在某些场合非常有用。

strip_tags

(PHP 3 >=3.0.8, PHP 4, PHP 5)

strip_tags — Strip HTML and PHP tags from a string

string strip_tags ( string str [, string allowable_tags] )

弊端 :

这个函数只能保留想要的html标签,就是参数string allowable_tags。

这个函数的参数allowable_tags的其他的用法。

strip_tags($source, ”); 去掉所以的html标签。

strip_tags($source, ‘<div><img><em>’); 保留字符串中的div、img、em标签。

如果想去掉的html的指定标签。那么这个函数就不能满足需求了。于是乎我用到了这个函数。

/**

* Removes specific tags.

*/

function strip_only_tags($str, $tags, $stripContent=FALSE) {

$content='';

if (!is_array($tags)) {

$tags=(strpos($str, '>') !==false ? explode('>', str_replace('<', '', $tags)) : array($tags));

if (end($tags)=='') {

array_pop($tags);

}

}

foreach($tags as $tag) {

if ($stripContent) {

$content='(.+<!--'.$tag.'(-->|\s[^>]*>)|)';

}

$str=preg_replace('#<!--?'.$tag.'(-->|\s[^>]*>)'.$content.'#is', '', $str);

}

return $str;

}

参数说明

$str — 是指需要过滤的一段字符串,比如div、p、em、img等html标签。

$tags — 是指想要移除指定的html标签,比如a、img、p等。

$stripContent=FALSE — 移除标签内的内容,比如将整个链接删除等,默认为False,即不删除标签内的内容。

使用说明

$target=strip_only_tags($source, array(‘a’,'em’,'b’));

移除$source字符串内的a、em、b标签。

$source='<div><a href="http://www.tsingyaun.cn" target="_blank"><img src="http://www.tsingyuan.cn/logo.png" border="0" alt="Welcome to linzl." />This a example from<em>lixiphp</em></a><strong>!</strong></div>

';

$target=strip_only_tags($source, array('a','em'));

//target results

//<div><img src="http://blog.lixiphp.com/logo.png" border="0" alt="Welcome to lixiphp." />This a example from<strong>!</strong></div>

:left;"