trim函数 php,php删掉空格trim函数不起作用问题解决方法

编码规则

处理这个问题的理论基础是对编码的理解,对于不同编码的理解也是作为一个码农必备的素质,推荐几篇好文章,读后应该就对编码规则进化了然于胸了,急性子、姿势渊博码农略过。

字符编解码的故事(ASCII,ANSI,Unicode,Utf-8区别)

关于字符编码,你所需要知道的

字符集和字符编码(Charset & Encoding)

(可以这样理解:Unicode是字符集,UTF-32/ UTF-16/ UTF-8是三种字符编码方案。)

php html_entity_decode 实体化   后产生的空白字符

47c11498044b00144ea0bb2b2ea0b006.png

trim函数

以PHP的trim 函数为例: 去除字符串首尾处的空白字符(或者其他字符)

string trim    ( string $str   [, string $charlist  ] ) 第二个参数可以指定要trim掉的字符

如果不指定第二个参数,trim() 将去除这些字符:" " (ASCII32(0x20)),普通空格符。

"\t" (ASCII9(0x09)),制表符。

"\n" (ASCII10(0x0A)),换行符。

"\r" (ASCII13(0x0D)),回车符。

"\0" (ASCII00x00)),空字节符。

"\x0B" (ASCII11(0x0B)),垂直制表符。

但是空白字符并不只是这些字符。比如全角空格(ascii:227)和一些控制字符,乱码字符等等。全角空格这种情况是比较多的情况,如果确定空白字符是全角空格引起的可以直接$str= str_replace("全角空格"," ",$str);

这样可以解决大部分问题。如果还是解决不了,恭喜你,你越到了变态数据。

解决思路

对于变态数据可以考虑用下面的方法处理

1、分割字符串,将字符串分割成以一个字节为单位的字符组: str_split($str)

2、查看空白字符编码。(比如遇到一个变态字符串前面的空格字符是:194 160 194 160,基本可以确定是这个字符的问题),这种字符主要来源:php html_entity_decode 实体化   后产生的空白字符

3、替换掉空白编码 。比如用正则函数:$str = preg_replace("/^[\s\v".chr(194).chr(160)."]+/","", $str); //替换开头空字符

$str = preg_replace("/[\s\v".chr(194).chr(160)."]+$/","", $str); //替换结尾空字符

查找问题字符

如下程序://比如字符串: “ abc”(前面是两个全角空格)

$str = "  abc";

$sArray = str_split($str);

foreach ($sArray as $s){

var_dump(ord($s));

}

结果:int(227)

int(128)

int(128)

int(227)

int(128)

int(128)

int(97)

int(98)

int(99)

发现a(97)前有2轮

int(227)

int(128)

int(128)

断定这就是一个utf-8的空白字符,下面的程序去掉这个字符就可以

$str = preg_replace("/^[\s\v".chr(227).chr(128)."]+/","", $str); //替换开头空字符

$str = preg_replace("/[\s\v".chr(227).chr(128)."]+$/","", $str); //替换结尾空字符

var_dump($str);

结果:string(3) "abc"

成功去掉该变态空白字符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值