Twilio短信消息中的引号处理问题求助
解决方案
问题核心在于参数编码处理不当,以及可能的双重转义/编码问题,以下是针对性解决步骤:
1. 先解码HTML实体
你收到的Bob's...是HTML实体编码,htmlspecialchars_decode无法处理'这类实体,改用html_entity_decode配合ENT_QUOTES参数,可同时解码单引号和双引号的实体:
$message = html_entity_decode($_POST['message'], ENT_QUOTES);
2. 确保获取原始提交内容
如果服务器开启了magic_quotes_gpc(仅老版本PHP存在),需先移除自动添加的反斜杠:
if (get_magic_quotes_gpc()) { $message = stripslashes($message); }
3. 用curl正确传递POST参数
不要手动拼接URL或POST字符串,用http_build_query让PHP自动处理参数编码,配合curl的CURLOPT_POSTFIELDS:
// 构造Twilio请求参数 $twilioParams = [ 'From' => '+你的Twilio号码', 'To' => '+接收方号码', 'Body' => $message ]; // 初始化curl请求 $ch = curl_init('https://api.twilio.com/2010-04-01/Accounts/你的账户SID/Messages.json'); // 设置curl选项 curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($twilioParams)); curl_setopt($ch, CURLOPT_USERPWD, '你的账户SID:你的认证Token'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 执行并关闭请求 $response = curl_exec($ch); curl_close($ch);
关键原因说明
- Twilio API Explorer能正常发送,是因为它内部自动处理了参数的URL编码和特殊字符转义,你手动生成的curl代码因硬编码未转义参数导致解析失败。
addslashes是为数据库查询设计的转义方式,不适用于API请求的参数编码,因此无效。
内容的提问来源于stack exchange,提问作者G-J
相关产品推荐
相关产品推荐

