
“”字: GBK 不认得(字库里应该没有这个字),需要将字符串用“|” explode 分割为数组,有好的解决办法?
code 存储编码: GBK
以下是测试 code
<?php $str = '和虽是奸臣|为什么被 GBK 歧视'; $arr = explode ('|',$str ); print_r ($arr ); ?> 目前我们用的办法: GBK 先转 UTF8 再转回来,感觉比较麻烦,有神马神秘简单的方法没?
<?php $str = '和虽是奸臣|为什么被 GBK 歧视'; $str = iconv ('GBK', 'UTF-8', $str ); $arr = explode ('|',$str ); print_r (utf_gbk ($arr )); function utf_gbk ($data ){ if (is_array ($data )){ foreach ($data as $k=>$v ){ $result[$k] = utf_gbk ($v ); } }else{ $result = iconv ("UTF-8", "GBK//IGNORE", $data ); } return $result; } ?> 目前最优写法,感谢 @Zzzzzzzzz
$str = '和虽是奸臣|为什么被 GBK 歧视'; mb_regex_encoding (''); $ss = mb_split('\|', $str ); print_r($ss); 1 moro 2015-08-27 16:57:53 +08:00 为什么要用 GBK.. |
3 lululau 2015-08-27 17:03:56 +08:00 打脸: echo 和 | iconv -t GBK | iconv -f GBK |
4 lululau 2015-08-27 17:04:20 +08:00 我知道 LZ 要说的是 |
5 hanbing OP @lululau 打脸前先测试下, GBK 用“|” 做 explode ,试试 OK ? 不是简体繁体的问题,是“|”符号 |
6 Zzzzzzzzz 2015-08-27 17:28:52 +08:00 在 gb 系列里是\xab\x7c, \x7c 就是|, 你可以用 mb_split ('\|', $str ); |
7 abelyao 2015-08-27 17:32:49 +08:00 用 explode 来分割中文本来就有危险… |
8 wesley 2015-08-27 17:35:16 +08:00 用 mb_开头的函数来处理 |
9 aprikyblue 2015-08-27 17:45:42 +08:00 把分隔符改用多个字符, length>=2byte |
10 letitbesqzr 2015-08-27 17:46:29 +08:00 卧槽,头像和我好像 |
12 hanbing OP @letitbesqzr - -! |
13 xfspace 2015-08-27 17:51:30 +08:00 via Android @letitbesqzr 我日。。。我还以为是你 |
14 letitbesqzr 2015-08-27 17:54:49 +08:00 @xfspace 哈哈,我背景红色的 还改小了点,适合一些网站 剪裁成圆形 |
16 aprikyblue 2015-08-27 18:34:56 +08:00 mb_ 系列应该是正确做法 不过试了下, mb_regex_encoding ('GBK')报错,只能 |
17 Hashell 2015-08-27 18:51:35 +08:00 我觉得,即使是历史问题,也要转为 UTF-8, 方便处理. 话说,为什么要自己写转化编码的函数啊? ```php header ('Content-Type:text/html; charset=gbk'); $str = '和虽是奸臣|为什么被 GBK 歧视'; function convert ($str ) { return array_map (function ($v ) { return mb_convert_encoding ($v, 'CP936', 'UTF-8'); }, explode ('|', mb_convert_encoding ($str, 'UTF-8', 'CP936'))); } $r = convert ($str ); var_dump ($r ); ``` |
18 caola 2015-08-27 20:31:50 +08:00 在 php7 下貌似没有这样的问题了 |
19 realpg PRO 我怎么感觉楼主的问题跟 GBK 半毛钱的关系都没有…… 明明是用非 mb 的方法处理 mb 导致的 |
20 breeswish 2015-08-27 22:40:17 +08:00 就是应该使用 mb_ 系列函数… 以及, mb_split 使用的是 mb_regex_encoding 函数所指定的编码,所以直接用 mb_split 当然是不行的..要先调用 mb_regex_encoding 设置为 /GBK |
21 coffeecat 2015-08-27 22:51:42 +08:00 转码以后你会看到 “ ”的一半跟“ |” 是一样的,分隔符不能这么用的,你换个就行了。。。 |
22 lululau 2015-08-27 22:52:15 +08:00 via Android 我错了,我不懂这世上最好的语言,不了解 PHP 的多字节字符串处理是什么样的,我也不该瞎举例子。 我只想问下 LZ , GBK 里没 |
23 lululau 2015-08-27 22:53:21 +08:00 via Android 字的话,你的那个 GBK 编码的 PHP 代码里是怎么有个 shen 字的。。。。 |
25 21grams 2015-08-28 13:51:17 +08:00 GBK 里怎么可能没有,简直是扯淡 |