API返回带Unicode转义的UTF-8文本,如何正确显示重音字符?
解决API返回Unicode转义字符的显示问题
你的问题核心在于用错了处理函数——utf8_encode()是用来把ISO-8859-1编码的字符串转成UTF-8,但你拿到的是带Unicode转义序列(比如\u00ea)的ASCII字符串,这个函数完全不适用,反而可能越搞越乱。
直接用下面的方法处理:
方法一:用json_decode解析转义序列
如果API返回的纯文本里包含\uXXXX这类Unicode转义,把字符串包装成合法的JSON格式后解码,就能自动把转义序列转换成对应的UTF-8字符:
// 假设$api_str是API返回的带转义的字符串 $api_str = 'Sonhar com um bar indica que voc\u00ea receber\u00e1 um aviso no trabalho que mudar\u00e1 seus planos para o pr\u00f3ximo ano. Voc\u00ea sentir\u00e1 que tudo est\u00e1 fluindo ao seu redor em uma dire\u00e7\u00e3o positiva. Voc\u00ea brinca com as emo\u00e7\u00f5es, mas ter\u00e1 que devolver algo, e n\u00e3o exatamente material. Seria \u00f3timo se voc\u00ea passasse o dia com ela e organizasse uma noite rom\u00e2ntica. Sensa\u00e7\u00e3o, tudo o que entra em voc\u00ea atrav\u00e9s dos sentidos, abre sua mente.'; // 包装成JSON字符串(处理特殊字符避免解析错误) $json_format = '"' . addcslashes($api_str, '"\\') . '"'; // 解码得到正常UTF-8文本 $normal_str = json_decode($json_format); // 直接输出(已经设置过Content-Type头的话无需额外处理) echo $normal_str;
方法二:如果API返回的是完整JSON响应
如果API本身返回的是JSON格式(比如整个响应是一个JSON对象),直接解析整个响应即可,不用单独处理字符串:
// 假设$api_response是API返回的完整JSON内容 $api_response = file_get_contents('你的API地址'); // 解析JSON,第二个参数true返回数组,false返回对象 $data = json_decode($api_response, true); // 取出需要的文本字段,转义已自动处理 echo $data['content']; // 这里替换成实际的字段名
注意事项
- 确保你的PHP文件本身是UTF-8编码(无BOM),避免额外编码冲突
- 之前设置的
header('Content-Type: text/html; charset=utf-8');和HTML meta标签保留,这部分是对的
内容的提问来源于stack exchange,提问作者Prinple Vrlo
相关产品推荐
相关产品推荐

