PHP中文文字处理技巧_第1页
PHP中文文字处理技巧_第2页
PHP中文文字处理技巧_第3页
PHP中文文字处理技巧_第4页
PHP中文文字处理技巧_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——PHP中文文字处理技巧在处理中文字符串的时候,如何处理?以下就是我用心推举PHP中文文字处理技巧,梦想对大家有扶助!

我们都知道,在PHP中处理字符串,可以用substr,str_split等等众多的方法,但是我想每个人都遇到过一个问题,那就是如何完备的处理中文字符串!我们知道,中文与英文和数字完全不同,英文和数字通常处境下都仅仅是占用一个字节,但是中文在不同编码下占用的字节是不同的,在UTF8中占用3个字节,而在GBK中那么占用2字节。

一、字符串逐字分割

即使我们确定使用的编码格式,例如我们最常用的UTF8编码,知道汉字是占用3字节,那么对于中英文混排,照旧会对比头疼,由于substr,str_split等方法都是依照字节分割的,例如我们想要逐字分割字符串,或是以确定长度分割字符串,这个问题就会变得繁杂,假设我们以3为倍数分割,除非我们保证字符串是纯粹的中文,否那么结果照旧有很大几率将中文“切碎”,当然假设你去网上探寻,可能会有人报告你,可以用mb_substr,但是你不得不留神一点,mb并不是PHP本身预装的,可能有些集成环境带有这个,但同样的,也有好多PHP不会带有这些mb开头的方法。例如我的服务器就没有mb开头的这些方法。

而在网上你能找到的还有利用循环遍历的方法去判断字符的编码,以及是否是汉字,然后再逐个用substr分割,虽然这个方法可以不借助mb这类额外的东西,但是实现起来实在过于麻烦,实际上只要你用的PHP不是太旧,我们只需要一步就能轻松的做到字符串的逐字分割。

我们需要借助的是一种对于字符串处理特别擅长,但好多人认为是对比高级的东西——正那么表达式。可能有些人提到正那么表达式,会对比反感,其实我个人最开头也感觉正那么表达式对比繁杂,由于里面用了各种“标点符号”来标记各种功能。但当你察觉它的强大之后,你真的会爱上它。

我们只需要使用preg_match_all/./u,$str,$arr;就可以得到一个名为$arr的字符数组,也就是我们需要的逐字分割的结果。没错,仅仅是这样简短的一行代码,就达成了逐字分割字符串的目的,是不是很简朴呢?其实原理也很简朴。

我们首先说一下preg_match和preg_match_all这两个方法,这两个方法是PHP内置的,特意用来匹配正那么的方法,所以不用惦记你的PHP环境不支持它们。preg_match是仅匹配一次,我们通常用来提取某一个字符串中的一个内容,当它找到第一个符合的结果时,便会直接将结果返回给变量,并且中断匹配,而preg_match_all那么是匹配全体符合的结果,他会将你传给他的字符串反复匹配,找到全体匹配的结果。

然后就是我们使用的正那么表达式,“/./u”特别的简朴,正那么表达式以斜线开头和终止,而在终止的斜线后面那么可以设置属性,常用的有i,u,g等,这里我们使用的u特别的重要,由于这里的u代表将字符串以UTF8编码格式来处理,假设没有这个,我们就不能正常的处理中文字符。而“.”那么是代表任意字符,因此这里我们只是匹配一个UTF8的字符,而由于我们使用了preg_match_all所以我们就可以得到全体的单个字符,也就达成了逐字分割的目的。

二、中文字符串长度

在获取中文字符串长度的时候,也会遇到问题,我们使用str_len获取的字符串长度也是不正常的,那么想要获取含有中文的字符串的字符个数该怎么办呢?其实分外的简朴,我们照旧使用preg_match_all/./u,$str,$arr;就可以了,只不过我们要拿到的不是$arr,而是preg_match_all的返回值,也就是$len=preg_match_all/./u,$str,$arr;我们拿到的$len就是字符串的长度,这也是我为什么建议使用preg_match_all逐字分割字符串,而不是用preg_split,由于我们用preg_match_all可以一步同时获取数组和字符串长度。

需要留神的是,还有一些文章中使用了explode,$str;来逐字分割字符串,但是这种做法是不正确的,explode的第一个参数不成以为空!

三、以字符串分割或组合字符串

接下来我们简朴了解一下其他两个最常用的方法,他们可以说是一对好兄弟,那就是explode和implode,长的都很像,但是功能却刚好是相反的。在我们处理一些字符串的时候,很经常用到这两个方法。

explode是用来以字符串分割字符串的方法,我们得到的是一个数组,并且这个数组不包含分隔符,例如我们有一个字符串是18899995464”两个电话号,我们想要将其分开,怎么办呢?只需要用explode/18899995464;就可以得到一个Array[0][1]数组,这种处境我们一般用于多个结果,例如多个电话,多个姓名等,我们使用explode分割后就可以遍历处理。

implode的作用刚好相反,是以字符串为分隔符将数组组合成一个字符串,例如我们要将一个数组的数据用逗号分割,implode,,$arr;我们得到的就是“1,2,3,4”这样的字符串。

我们在片面时候,处理一些数量不确定的数据的时候,往往会将这些内容作为一个字符串保存在数据库的一个字段中,而我们使用的时候就需要用explode分割开举行处理。例如个人资料,我们在填写的时候,往往允许添加多个工作体验,多个就读学校,这些数据的条目数量不确定,我们可能就会将其作为一个字符串写入到一个字段中。

在大片面语言中都存在这样的方法,但是PHP的自由度更高一些,并不仅限于一个字符,你也可以使用字符串来分割或组合,例如implode/!/,$arr;这种方式也是可以的,这样其实特别有用,例如我们写入SQL插入语句的VALUES的时候,我们知道,SQL插入语句的VALUES要求是val1,val2,val3……这样的格式,每一个值都要求使用单引号括起来,那么我们假设要每一个值使用一个变量,逐个去写,鲜明对比麻烦,那么我们有没有对比“偷懒”的方式呢?当然有!

首先,你的表单依次和你插入的字段依次要一致,其次全体不需要写入数据库的控件不要给name属性。这样就可以保证一点,$_POST数组得到的是刚好对应数据库字段的数据。接下来我们只要,$values=.implode,,$_POST.;就可以得到一个格式为val1,val2,……这样的字符串,结果只需要在VALUES的地方写到VELUES$values就可以一步完成插入的操作了。为了防止看不清上面那行代码,我用文字表达一下吧,首先我们放两个字符串,里面是单引号,即双引号单引号双引号这是开头和结尾两个字符串的片面,不要看成五个单引号。中间的片面那么是拼接字符串,间隔符是单引号逗号单引号这个片面,而我们同样需要把单引号括在双引号里面。为什么前后还要加一个单引号呢?由于implode的间隔符是加在值中间的,只用implode得到的刚好是val1,val2,val3由于,是作为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论