XML文件空格符问题
程序员文章站
2023-12-22 17:54:46
...
XML文件
我把上述xml的信息转存到mysql,在查询的时候发现中间带有空格键的某些值是可以查询的,而某些却查询不到.
比如
SELECT * FROM `dux_region` WHERE `region_name` = 'Aland lslands' 可以查询出来
而手写的'United States'
SELECT * FROM `dux_region` WHERE `region_name` = 'United States' 不能查出数据
但是从XML中复制的 ‘United States’却可以
网上说是中间 空格符 的问题
这个问题如何解决
恩比较大 有部分出现了异常
我在楼上贴了网盘文件地址
556e69746564 c2a041726162 c2a0456d6972617465732220436f64653d22415245223e0d
United Kingdom" Code="GBR">
556e69746564c2a04b696e67646f6d2220436f64653d22474252223e0d
United States" Code="USA">
556e69746564c2a05374617465732220436f64653d22555341223e0d
United States Minor Outlying Islands" Code="UMI" />
556e69746564c2a0537461746573c2a04d696e6f72c2a04f75746c79696e67c2a049736c616e64732220436f64653d22554d4922202f3e0d
看到了吧?那可不是空格哟,虽然表现一样
而反过来查
我把上述xml的信息转存到mysql,在查询的时候发现中间带有空格键的某些值是可以查询的,而某些却查询不到.
比如
SELECT * FROM `dux_region` WHERE `region_name` = 'Aland lslands' 可以查询出来
而手写的'United States'
SELECT * FROM `dux_region` WHERE `region_name` = 'United States' 不能查出数据
但是从XML中复制的 ‘United States’却可以
网上说是中间 空格符 的问题
这个问题如何解决
回复讨论(解决方案)
可能存在 2 字节的 utf-8 空白字符
贴出经 base64 编码的原始 XML 的内容
文件太大了,我贴出一部分吧。
你这样贴是没有用的!
因为经复制粘贴和 CSDN 编辑器处理后,一些特殊字符就不复存在了
你要么贴出 echo base64_encode(file_get_contents('你的xml文件')); 的结果
要么就把你的xml文件放到网盘上
这种东西?
77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxMb2NhdGlvbj4NCiAgPENvdW50cnlSZWdpb24gTmFtZT0iQWZnaGFuaXN0YW4iIENvZGU9IkFGRyI+DQogICAgPFN0YXRlID4NCiAgICAgIDxDaXR5IE5hbWU9IkhlcmF0IiBDb2RlPSJIRUEiLz4NCiAgICAgIDxDaXR5IE5hbWU9IkthYnVsIiBDb2RlPSJLQkwiLz4NCiAgICAgIDxDaXR5IE5hbWU9IkthbmRhaGFyIiBDb2RlPSJLREgiLz4NCiAgICAgIDxDaXR5IE5hbWU9Ik1hemFyLWkgU2hhcmlmIiBDb2RlPSJNWlIiLz4NCiAgICA8L1N0YXRlPg0KICA8L0NvdW50cnlSZWdpb24+DQogIDxDb3VudHJ5UmVnaW9uIE5hbWU9IkFsYW5kIGxzbGFuZHMiIENvZGU9IkFMQSIgLz4NCiAgPENvdW50cnlSZWdpb2
http://pan.baidu.com/s/1kTCCDtd
网盘地址
太大了?贴不下?
你贴出的部分没有发现异常
太大了?贴不下?
你贴出的部分没有发现异常
恩比较大 有部分出现了异常
我在楼上贴了网盘文件地址
$s = file_get_contents('D:\我的文档\Downloads\全球各国省市(英文版).xml');preg_match_all('/United.+/m', $s, $m);foreach($m[0] as $v) { echo "$v\n"; echo bin2hex($v), PHP_EOL;}United  Arab  Emirates" Code="ARE">
556e69746564 c2a041726162 c2a0456d6972617465732220436f64653d22415245223e0d
United Kingdom" Code="GBR">
556e69746564c2a04b696e67646f6d2220436f64653d22474252223e0d
United States" Code="USA">
556e69746564c2a05374617465732220436f64653d22555341223e0d
United States Minor Outlying Islands" Code="UMI" />
556e69746564c2a0537461746573c2a04d696e6f72c2a04f75746c79696e67c2a049736c616e64732220436f64653d22554d4922202f3e0d
看到了吧?那可不是空格哟,虽然表现一样
而反过来查
preg_match_all('/.+\xc2\xa0.+/m', $s, $m);foreach($m[0] as $v) { echo "$v\n"; echo bin2hex($v), PHP_EOL;}就更多了
在 gbk 环境中可看到
真的贴不下了.......
谢谢版主,问题已经解决,以前没碰到过这种问题,今天又学到了一招。