php实现班级通信录导入数据清洗_php导入前清洗脏数据【步骤】-php教程

必须严格校验手机号为11位且以1开头,提取数字后双判;姓名需正则清理不可见字符再trim;CSV须先去BOM并检测编码;批量插入应通过临时表加事务保障原子性。

导入前必须校验手机号格式

班级通信录里常混入“138****1234”“138-1234-5678”甚至“手机:13812345678”这类脏数据,filter_var($phone, FILTER_SANITIZE_NUMBER_INT) 会直接删掉所有非数字字符,但可能留下11位以外的数字串(比如座机带区号或学生填了QQ号)。实际要的是严格11位纯数字且以1开头的手机号。

  • 先用 preg_replace('/[^\d]/', '', $phone) 提取全部数字
  • 再用 strlen($cleaned) === 11 && $cleaned[0] === '1' 做长度和首字符双判
  • 遇到“138123456789”这种12位的,不能截断,得标为异常行并记录原始值,否则数据错位

姓名字段去重空格与不可见字符

Excel复制粘贴进CSV时,姓名常带全角空格、零宽空格(\u200b)、换行符,trim() 对它们完全无效。直接 mb_trim($name, ' \t\n\r\0\x0B\u{2000}-\u{200F}\u{2028}\u{2029}\u{202F}\u{2060}\u{FEFF}') 也不现实——PHP原生没 mb_trim。

  • 用 preg_replace('/[\s\u{2000}-\u{200F}\u{2028}\u{2029}\u{202F}\u{2060}\u{FEFF}]+/u', ' ', $name) 替换所有空白类字符为单个半角空格
  • 再套一层 trim() 去首尾
  • 最后检查是否为空字符串或只剩一个空格,是则视为无效姓名,不能设默认值“未知”,得留空或报错

Excel读取后立刻转UTF-8并检测BOM

Windows下导出的Excel CSV常带UTF-8 BOM(\xEF\xBB\xBF),导致第一列字段名变成 "姓名",后续用 $row['姓名'] 取值失败。更隐蔽的是,BOM可能只出现在某几行,造成部分数据解析偏移。

  • 读取每行原始字符串后,先用 ltrim($line, "\xEF\xBB\xBF") 剥离BOM
  • 再用 mb_detect_encoding($line, ['UTF-8', 'GBK', 'BIG5'], true) 判断编码,非UTF-8则强制 mb_convert_encoding($line, 'UTF-8', 'GBK')
  • 别依赖 iconv('GBK', 'UTF-8//IGNORE', $line),它会静默丢字,而班级名“閔行區實驗中學”丢一个字就成“行區實驗中學”

批量插入前用临时表做原子性清洗

直接在目标表上 UPDATE ... SET name = TRIM(name) 风险太大——万一中间出错,脏数据已写入,回滚困难。正确做法是把清洗逻辑下沉到数据库层,靠事务+临时表隔离。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » php实现班级通信录导入数据清洗_php导入前清洗脏数据【步骤】-php教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3997481+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3997481+
  • 本周更新: 0+
  • 最后更新: 2026-03-16