PHP如何快速转换变量中HTML实体为原始字符适配WhatsApp
PHP HTML实体转原生重音字符高效方案
直接使用PHP原生内置函数html_entity_decode()即可实现需求,不需要自行编写字符映射表或者正则替换,性能最高、兼容性最好。
问题原因
file_get_contents读取到的内容中á、ã、ç这类重音字符被转为ç格式的HTML实体,WhatsApp接口不识别这类实体就会出现消息截断;另外原始代码直接把内容拼接到跳转URL中,没有做URL编码,本身也存在特殊字符打断参数结构的风险。
修正后可直接使用的代码
$fim = file_get_contents($pedidoaux); // 将所有HTML实体转回UTF-8编码的原始字符,覆盖引号类实体的转换 $fim = html_entity_decode($fim, ENT_QUOTES, 'UTF-8'); // 对拼接进URL的文本做标准URL编码,彻底避免参数截断问题 $fim = urlencode($fim); header("Location: http://api.whatsapp.com/send?1=pt_BR&phone=WHATSAPPNUMBER&text=$fim");
关键注意点
html_entity_decode第二个参数传ENT_QUOTES:会同时转换单引号、双引号对应的HTML实体,避免内容中引号导致的格式异常- 第三个参数固定传
'UTF-8':指定输出字符编码为UTF-8,兼容葡萄牙语等带重音的字符,避免不同PHP版本默认编码不一致导致的乱码问题 - 追加
urlencode处理:是URL传参的标准要求,就算没有HTML实体,内容里的空格、&、?等保留字符也会截断URL参数,这一步是必须加的
内容的提问来源于stack exchange,提问作者MJFM apps
相关产品推荐
相关产品推荐

