这里我知道用str_replace函数,在网上查过之后也尝试了一下,但是发现都没有用,
比如:
  两个半角空格表示全角空格去替换;
  直接在代码里面输全角空格去替换;
  什么所谓的'\s';以上的三种方法都不管用,只好求救了。PS:处理的文件编码是utf8

解决方案 »

  1.   

    本帖最后由 xuzuning 于 2011-07-27 10:16:17 编辑
      

  2.   

    在txt里面,我用全角空格去查找是可以找的到的,下面的原文:
    insert into `smm_news_rekeyword` (`news_id`,`test`,`news_keyword_name`,`disable`,`renew_date`) values ('82181','86245','钴进口 ','0','0');
      

  3.   

    但你帖出来的数据是 gbk 编码的呀
      

  4.   

    我的文件是有中文的,但是已经转换成utf8的,txt文档另存为转换的啊,utf8也可以有中文的哦
      

  5.   

    '钴进口 '
    你贴出的这个的确是 gbk 编码的,你用 utf-8 的全角空去匹配他当然是匹配不到的你若是怀疑这一点,请贴出 base64_encode 编码后的结果
      

  6.   

    我在数据库里查询了一下,发现无论后面有没有全角空格,ascii的值都是238,这该怎么解释呢?
      

  7.   

    echo base64_encode('你查询到的怀疑有空格的串');
    帖出结果只有在共同的基础上才有可能讨论,胡乱的猜测总是不行的!
      

  8.   

    以下是我实验的结果:
    $x = base64_encode('钴进口 ');
    $y = base64_encode('钴进口');
    $z = base64_encode(' 钴进口 ');
    $w = base64_encode(' 钴进口');
    echo $x;
    echo "\n\r";
    echo $y;
    echo "\n\r";
    echo $z;
    echo "\n\r";
    echo $w;
    得到的结果:
    7ty9+L/aoaE=7ty9+L/aoaHu3L34v9qhoQ==oaHu3L34v9o=
      

  9.   

    本帖最后由 xuzuning 于 2011-07-27 17:28:22 编辑
      

  10.   

    还有我确定是全角空格,因为我转换成ANSI格式的时候使用$name = preg_replace("/[\s| ]+/","",$name);做替换就是可以的,但是这样后面的全角空格是去掉了,但是文件全变乱码了
      

  11.   

    这个是我读取文件里的内容显示的:
    “二氧化铈 ”,“同轴电缆 lan ”,“卷筒电缆  ”,“ 铅黄铜”,“梯级式电缆桥架  ”
    以下是base64_encode的数值:
    77u/5LqM5rCn5YyW6ZOI44CA5ZCM6L2055S157yGIGxhbuOAgA==5Y23562S55S157yG44CA44CA44CA6ZOF6buE6ZOc5qKv57qn5byP55S157yG5qGl5p6244CA44CA
      

  12.   

    $name = preg_replace("/[\s| ]+/","",$name);
    ????
    不能这样写的,[] 中的是单字节字符,你把全角空放在里面当然是不行的。
    他就相当于把中文内码还有 a1 的部分都删掉了。比如 啊 的内码是 b0a1 把后边去掉到然要乱码了
    要写作
    $name = preg_replace("/\s| /","",$name);
      

  13.   

    我解编码了一下,发现:
    [二氧化铈 ] : efbbbfe4ba8ce6b0a7e58c96e99388e38080
    [同轴电缆 lan ] : e5908ce8bdb4e794b5e7bc86206c616ee38080
    [卷筒电缆  ] : e58db7e7ad92e794b5e7bc86e38080e38080
    [ 铅黄铜] : e38080e99385e9bb84e9939c
    [梯级式电缆桥架  ] : e6a2afe7baa7e5bc8fe794b5e7bc86e6a1a5e69eb6e38080e38080
    那就是说全角空格的编码是:e38080
      

  14.   

    这就对了, 这次给出的是 utf-8 编码的数据了
    内码 e38080 就是 utf-8 编码的全角空个的内码了
    要想替换掉他,自然是在 utf-8 编码的文件中书写代码了,键入全角空就不会错了如果一定要在 非utf-8编码的编辑器里写代码,那么这个全角空要写作
    $space = iconv('gbk', 'utf-8', "\xa1\xa1");
    然后把变量 $space 带入到需要的地方
    当然也可这样写
    $space = "\xe3\x80\x80";
      

  15.   

    按你说的,问题圆满解决:
    $space = "\xe3\x80\x80";
    $name = str_ireplace($space,"",$name);thanks 3q