PHP 解析微信用户信息昵称中有特殊字符,一个点, json 无法解析

2018-10-17 09:45:44 +08:00
 lcy630409

http://file.whzxc.cn/126.png 如图,获取微信用户信息中的昵称,这个点,php json 解析不了,复制到百度 百度都直接跳到首页了 使用 mb_convert_encoding(,'utf-8','utf-8') 也不行 谁知道怎么过滤么

7845 次点击
所在节点    PHP
29 条回复
imnpc
2018-10-17 09:52:29 +08:00
// 过滤掉 emoji 表情
function filterEmoji($str)
{
$str = preg_replace_callback( '/./u',
function (array $match) {
return strlen($match[0]) >= 4 ? '' : $match[0];
},
$str);
return $str;
}
reus
2018-10-17 10:09:46 +08:00
垃圾 PHP
PHP 是世界上最垃圾的流行语言
DamonLin
2018-10-17 10:11:43 +08:00
@reus 哈哈哈哈
lcy630409
2018-10-17 10:13:39 +08:00
@imnpc 不是 emoji 表情呢,那个符号我复制到 v2 保存也不见了,真 tm 蛋痛,用户设置的各类用户名真心无语
lcy630409
2018-10-17 10:13:58 +08:00
@reus 你这样是会被打的 ^_^
jowan
2018-10-17 10:16:17 +08:00
数据库设置 utf8mb4 编码,普通的 utf8 只能保存部分 emoji 表情
jowan
2018-10-17 10:17:30 +08:00
表也要设置一下
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
lcy630409
2018-10-17 10:19:37 +08:00
@jowan 不是保存的问题,从微信那边获取过来之后,json_decode 都返回 null,jsonlasterr 为 3,放在解析 json 里 提示这个,开始发现 手动处理了这个用户,然后发现有一小部分用户都有这个问题,就只能找解决办法了
jowan
2018-10-17 10:21:16 +08:00
@lcy630409 确定不是入库时候无法正确保存的问题吗 另外这个符号能不能贴出来
wei745359223
2018-10-17 10:26:46 +08:00
把 JSON 字符串发出来
lcy630409
2018-10-17 10:30:01 +08:00
@wei745359223 那个点贴不出来,刚在主题中试过了,保存后 v2 显示不出来,粘贴到百度,回车,然后又跳到百度首页了.....
koast
2018-10-17 10:32:40 +08:00
不能贴一下字符编码吗
dobelee
2018-10-17 10:43:51 +08:00
你确实之前编码是 utf-8 ?
lcy630409
2018-10-17 10:44:43 +08:00
感谢大家的讨论,找到办法了,问师兄得出了办法了
在 json_decode 之前
preg_replace('/[\x00-\x1F\x80-\x9F]/u', '', trim($a));
就可以了
此贴终结,再次感谢各位热心回答,谢谢
sobigfish
2018-10-17 10:45:39 +08:00
呃,没有直接测微信的
$jstring= '{"nickname":"喜喜😂(●ˇ∀ˇ●)","sex":2}';
var_dump(mb_convert_encoding($jstring,'utf-8'));
var_dump(json_decode(mb_convert_encoding($jstring,'utf-8')));
var_dump(json_last_error_msg());
但没毛病啊,你 php 版本?


Output for 5.6.38 - 7.3.0rc3
string(48) "{"nickname":"喜喜😂(●ˇ∀ˇ●)","sex":2}"
object(stdClass)#1 (2) {
["nickname"]=>
string(25) "喜喜😂(●ˇ∀ˇ●)"
["sex"]=>
int(2)
}
string(8) "No error"
wei745359223
2018-10-17 10:46:38 +08:00
sobigfish
2018-10-17 10:52:25 +08:00
3 JSON_ERROR_CTRL_CHAR
lcy630409
2018-10-17 13:51:14 +08:00
@sobigfish 不是你这里面的字符呢,你可以看一下上面的图,在 json 校验下 那个点会被解析成||这个啥符号,粘贴到 notepad++中显示 DC4,估计是啥特殊的表情吧
yc8332
2018-10-17 13:54:19 +08:00
人家能发出来你就应该能保存。。没毛病,只是可能你的程序不能支持。。。比如把它转成 unicode 保存,显示的时候再恢复
sgq1128
2018-10-17 14:01:08 +08:00
这是个非法的 json 啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/498336

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX