今天咱们得聊聊PHP就是那字符串分家的事,再顺便聊聊W3C就是那标准。别小看这俩,它们在某些时候还挺能玩出花儿来的。特别是你从网页上抓点啥数据的时候,W3C那啥标准能让你头疼,PHP那啥分割函数更让你头疼。
字符串分割的基础操作
咱们得聊聊PHP里那最常用的字符串切分工具——explode()
。这货操作起来直接了当,就是按照你定的分隔符,把那字符串一刀切,整成个数组。好比说:
$str = "apple,banana,orange";
$arr = explode(",", $str);
print_r($arr);
输出结果就是:
Array
(
[0] => apple
[1] => banana
[2] => orange
)
这不就是小case?可问题来了,要是字符串里冒出些古怪的符号,或者符号两边还带着空格,你打算咋整?比如:
这货里头有苹果、香蕉、橙子,就这仨。
输出结果:
[1] => banana
[2] => orange
瞧见没?那banana
和orange
前头突然多出个空格小家伙。这时候你得手动给它来个“瘦身术”了。
这货儿把那串儿逗号分隔的字符串给拆了,然后对每一段儿都来个去头去尾的洗漱,弄出一堆干净利索的字符串来。
这样输出就干净了:
W3C标准的坑
咱们来聊聊这W3C标准,那可是网页开发的圣典,谁都得照着来。不过,有时候这标准里的某些条款,比如HTML标签里的空格处理,会让你在字符串处理上头大如斗。
假设你从网页上抓了一段HTML代码:
html
<div>apple, banana, orange</div>
搞个正则表达式或者啥的来捞点文字出来,要是弄到了“苹果、香蕉、橙子”这些货,你想来个“爆炸”操作切开来玩。可别急,你发现里面的空格可不止一个两个,还可能有换行、表格符啥的乱七八糟的。
这时候,你可能会想到用正则表达式来处理:
这货里头有苹果,还有香蕉,再不济还有个橙子。
这货把那字符串用逗号给劈成了几块。
这东西看着挺美,可别忘了,按照W3C那套规矩,对那些特殊符号有它自己的玩法。比如说,你代码里头可能得用到HTML实体符号(比如那个 ),这时候你得先把这些符号给解码了才能用。
这货,就俩字儿,苹果、香蕉、橙子,连起来就那么几个。
这货得先给字符串来个脱壳大法,把那些HTML实体字符全给还原成真身。
<b>更复杂的情况</b>
有时候,碰到的麻烦可不止逗号那么简单。瞧瞧,字符串里头,符号多得跟开了锅似的,啥都有,还有那些套娃似的嵌套分隔符,真是让人头大。
这货里头有苹果、香蕉,还有橙子和葡萄,逗号和分号、竖线分得清清楚楚。
这时候,你可能需要用到更复杂的正则表达式:
这货儿把那字符串一劈两半,弄出一堆碎片,就那么简单。
这东西挺带劲,不过要是你想留着啥分隔符,比如那小圆点;啥的,就得把
PREG_SPLIT_DELIM_CAPTURE这东西给整上。
这东西把那字符串给劈开了,用逗号、分号、竖线当刀,一刀下去,直接把东西给分了,一个不留神,连符号都给吞了。
[1] => ,
[2] => banana
[4] => orange
<b>处理多字节字符</b>
搞中文这事,得小心点。PHP里那俩函数,explode()和
preg_split(),它们默认按字节来分。你要是直接拿它们对付中文,那可就闹笑话了。不信你试试,保不齐就给你整出点乱七八糟的东西来。
$str = "苹果,香蕉,橙子";
[0] => 苹果
[1] => 香蕉
[2] => 橙子
这看起来没问题,但要是你那逗号是那种多字节的货色,比如中文里的那个逗号,,那咱就得祭出
mb_split()这招了。
$str = "苹果,香蕉,橙子";
$arr = mb_split(",", $str);
<b>总结</b>
PHP这东西切字符串看似小菜一碟,可真要一用到实际,特别是一跟W3C那套标准搅和起来,分分钟给你挖坑。要搞定这些难题,关键得看:
先来给字符串来个美容,比如把多余的空格给消掉,把那些HTML里的特殊符号给解码回原样。
挑个对路的函数:看具体情况,要么用explode(),要么
preg_split(),或者来个
mb_split()`。
处理那些中文,其他多字节字符,得用对方法,对路子的函数和编码。
代码测试别忘,尤其得留心那些从网页上捞来的数据。得小心各种边缘情况,毕竟,W3C标准虽然挺规矩,可现实中的网页那可就不怎么规矩了。
今天个的分享到此结束。要是你有啥高招,评论区见哈。下次咱们再聚!