嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

周梦康 发表于 2016-05-02 1852 次浏览 标签 : 未解决php

免费领取阿里云优惠券 我的直播 - 《PHP 进阶之路》

采集到的内容有很多空格,想要去掉不必要的空格

$tmp = preg_replace("/\s/is",'',$desc->textContent);
var_dump($tmp);//string(47) "?书???名:?计算机集成制?(原书第3版)"

正则替换不可见字符之后乱码,为什么会这样,我还不知道,只能换一个思路了。

使用str_replace,有些空格还是替换不掉,测试如下

$tmp = str_replace(" ","",$desc->textContent);
var_dump($tmp);
string(37) "书名:嵌入式系统设计与实践"
string(18) "图书定价:69元"
string(24) "作者:(美)Elecia White"
string(31) "出版社:机械工业出版社"
string(23) "出版日期:2013-05-01"
string(21) "ISBN号:9787111415848"
string(12) "开本:16开"
string(10) "页数:282"
string(10) "版次:1-1"
string(43) " 书名:   普适计算及其商务应用  "
string(24) " 图书定价:   45元  "
string(27) " 作者:   (美)Bo Begole  "
string(37) " 出版社:   机械工业出版社  "
string(29) " 出版日期:   2012-04-01  "
string(27) " ISBN号:   9787111375753  "
string(18) " 开本:   16开  "

有些空格,使用trim能干掉,但是和上面str_replace一样,有时候也会失效。既然这样,我只能把每个字符都打印出来,看看其ascii码到底是多少。

function delEmptyChars($str){
    $length = mb_strlen($str,'utf-8');
    $return = "";
    for ($i=0; $i < $length; $i++) {
        $_tmpStr = mb_substr($str,$i,1,'utf-8');
//        echo $i."\t".$_tmpStr."\t".ord($_tmpStr)."\n";

        $ascii = ord($_tmpStr);

        if($ascii < 33 || ($ascii > 174 && $ascii < 224)){
            continue;
        }
        $return .= $_tmpStr;
    }
    return $return;
}

还个笨办法也是一直用来处理非utf8mb4数据库存储emoji表情的思路。

嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

评论列表