如果消息中有空格,PHP 中的 SMS API 将不起作用

use*_*442 1 php

我试图从 Angular 访问 PHP API URL 来发送短信。

如果消息中没有空格,则一切正常,但如果我添加空格,则不会收到任何消息。

下面是我的 PHP 代码:

<?php
header('Access-Control-Allow-Headers:Content-Type,x-prototype-version,x-requested-with');
header('Cache-Control:max-age=900');
include_once("conn.php");
$phno=$_POST['phno'];
$msg=$_POST['msg'];
$final = array();
$msg='Thank you.';
sms($phno,$msg);

$final['status']='success';
$final['message']="Success";



    echo json_encode($final);
function sms($phonesms,$msg)
    {
        //echo 'hello';
        $url = 'http://sms.domain.com/Api.aspx?usr=abcapi&pwd=pass123&smstype=TextSMS&to='.$phonesms.'&rout=Transactional&from=SMSACT&msg='.$msg; 
echo $url;      
         $ch = curl_init();
         curl_setopt($ch, CURLOPT_POST, false);
         curl_setopt($ch, CURLOPT_URL, $url);
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
         $response = curl_exec($ch);
         $err = curl_error($ch);
         curl_close($ch);
    }
?>
Run Code Online (Sandbox Code Playgroud)

所以如果$msg='Thank you.';短信不去,如果$msg='Thankyou.';短信去。

我确信我还需要在这里做一些事情 -$url = 'http://sms.domain.com/Api.aspx?usr=abcapi&pwd=pass123&smstype=TextSMS&to='.$phonesms.'&rout=Transactional&from=SMSACT&msg='.$msg;

vbe*_*nce 5

字符串连接不是构建 URL 的理想方法。如果您这样做,请确保对所有参数应用正确的转义。

$url = 'http://sms.domain.com/Api.aspx?usr=abcapi&pwd=pass123&smstype=TextSMS&to='
    . urlencode($phonesms)
    . '&rout=Transactional&from=SMSACT&msg='
    . urlencode($msg); 
Run Code Online (Sandbox Code Playgroud)

注意:URL 中的许多字符不合法或具有特殊含义,例如空格;这会将您的空格转换为“+”字符,这是它们的“转义”版本。

请参阅https://www.php.net/manual/en/function.urlencode.php了解更多信息。