zoukankan      html  css  js  c++  java
  • php 去除变态空格字符方法,空格trim不掉问题解决思路

    前言:今天过滤一段文本,后面有2个空格,用trim去不掉,用preg_match也去不掉,去网上翻阅了无数的方法,终于找到了非常好的一个解决方法。该文章来源于https://my.oschina.net/fffddgx/blog/196376   ,思路是  ,首先将字符分隔开,str_split, 然后循环每个字节查看他的编码,ord();

    trim函数

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

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

    如果不指定第二个参数,trim() 将去除这些字符:

    " " (ASCII32(0x20)),普通空格符。   
    "	" (ASCII9(0x09)),制表符。    
    "
    " (ASCII10(0x0A)),换行符。    
    "
    " (ASCII13(0x0D)),回车符。    
    "" (ASCII00x00)),空字节符。    
    "x0B" (ASCII11(0x0B)),垂直制表符。

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

    $value = str_replace("全角空格"," ",$value);

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

    思路

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

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

    2、查看空白字符编码。(比如遇到一个变态字符串前面的空格字符是:194 160 194 160,基本可以确定是这个字符的问题)

    3、替换掉空白编码 。比如用正则函数:

    $value = preg_replace("/^[sv".chr(194).chr(160)."]+/","", $value); //替换开头空字符
    $value = preg_replace("/[sv".chr(194).chr(160)."]+$/","", $value); //替换结尾空字符

    例子

    如下程序:

    //比如字符串: “ 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("/^[sv".chr(227).chr(128)."]+/","", $str); //替换开头空字符
    $str = preg_replace("/[sv".chr(227).chr(128)."]+$/","", $str); //替换结尾空字符
    
    var_dump($str);

    结果:string(3) "abc",成功去掉该变态空白字符。

  • 相关阅读:
    [转]谈谈技术原则,技术学习方法,代码阅读及其它
    ImageMagick 详细安装使用 linux (jmagick)
    Sql Server中的表访问方式Table Scan, Index Scan, Index Seek
    在SQL Server中创建用户角色及授权
    LINQ to SQL:创建你的第一个程序
    Sql Server Statement Output
    内置系统账户:Local system/Network service/Local Service 区别
    SQL Server的备份
    SQL Server 使用Agent自动备份数据库
    将sql server 2000的备份文件导入到sql server 2012中
  • 原文地址:https://www.cnblogs.com/-mrl/p/10026356.html
Copyright © 2011-2022 走看看