PHP爬虫抓取Facebook泰语用户名出现编码乱码如何解决?
问题根因
- 当前返回的
เ格式内容为HTML十六进制实体编码,你之前使用的mb_convert_encoding函数不支持直接解析该类实体,因此无法转为可读泰语字符 - 原代码中还存在语法错误:get请求配置项的headers数组缺少闭合右方括号
修复代码
$url = "https://www.facebook.com/7elevenqueen"; $client = new Client(); // 补全缺失的数组闭合括号 $response = $client->get($url, ['headers' => ['User-Agent' => 'spider']]); preg_match_all('/<meta([^>]+)content="([^>]+)>/', $response->getBody(), $getData); $rawContent = str_replace('&', '&', substr($getData[2][9], 0, -3)); // 使用html_entity_decode解析HTML实体,指定UTF-8编码输出 $name = html_entity_decode($rawContent, ENT_QUOTES | ENT_HTML5, 'UTF-8');
优化建议
不推荐用正则匹配HTML标签内容,页面结构稍有变动(比如meta标签顺序调整)就会导致$getData[2][9]索引失效,可改用PHP内置的DOMDocument类解析DOM结构,精准匹配需要的meta标签属性。
内容的提问来源于stack exchange,提问作者ferdinand
相关产品推荐
相关产品推荐

