php - 从 twilio 收到的电话号码格式

标签 php mysql twilio

我将从 twilio 收到的短信存储在数据库中,以便以后使用。当我在沙箱中执行此操作时,它起作用了。然而,当我升级到一个普通电话号码时,收到的号码与发送到的号码相同,但是 +1(或者对于 xxxxxxxxxx,其中 x 是原始号码,它看起来更像 1xxxxxxxxxx+)

因此,我将 mysql_query 更改为以下内容:但它仍然无法正常工作。如何识别这是原始电话号码?

<?php
    $starttime = time(); 
    $number = $_POST['number'];

    $number1 = "1" . $number;
    $number2 = $number . "1";
    $number3 = "+1" . $number;
    $number4 = $number . "+1";
    $number5 = "+" . $number . "1";
    $number6 = "1" . $number . "+";
    $number7 = $number."1+";

    $received = mysql_query("SELECT * FROM sms_received 
                WHERE (responder='$number' OR responder='$number1' 
                     OR responder='$number2' OR responder='$number3' 
                     OR responder='$number4' OR responder='$number5'
                     OR responder='$number6' OR responder='$number6')
                AND (body='y' OR body='yes' OR body='Y' OR body='Yes' OR 'yea' OR 'Yea')
                AND timestamp BETWEEN ".date('Y-m-d H:i:s', strtotime($starttime))." AND NOW()"); 
?>

但是,仍然没有收到任何东西。有什么想法我还能检查是否收到了用户的短信吗?我可以在数据库中看到它在那里……但是 mysql 没有找到它。它以前工作过,当发送的号码与收到的号码相同时,但是加上 +1 就把它搞砸了。 (之前的代码只有 WHERE responder = '$number' 并且它起作用了,但是额外的变量并没有帮助它)。 此代码是否有太多 OR?这甚至是个问题吗?

更新:

谢谢,这是我在将数字保存到数据库之前用来将数字剥离为 xxxxxxxxxx 格式的函数:

function checkPhone($responder){
    $items = Array('/\ /', '/\+/', '/\-/', '/\./', '/\,/', '/\(/', '/\)/', '/[a-zA-Z]/');
    $clean = preg_replace($items, '', $responder);

    if (substr($clean, 0, 1) == "1") {
        return substr($clean, 1, 10); 
    }
    else {
        return substr($clean, 0, 10);   
    }
}

$number = checkPhone($responder);

最佳答案

Twilio 返回格式为 E.164 的数字,这是国际公认的电话号码格式标准。

一般来说,最佳做法是先将数字标准化为 E164,然后再将其存储在数据库中。这样一来,您就不必担心使用同一号码的两个不同副本存储不同的数据 - 例如 925-555-1234 和 (925) 5551234。

Google 有一个 libphonenumber将为您转换数字的库。它适用于 Javascript、C++、Java 和 Python。

如果您使用的是 PHP,并且只使用美国/加拿大号码,您可以编写一个函数来规范化电话号码,它执行如下操作:

- Strip out all non number characters from the phone number 
  (parentheses, dashes, spaces) - you can use a function like preg_replace
- if the phone number begins with a +1, do nothing
- if the phone number begins with a 1, add a +
- else, add a +1 to the beginning of the number.
- finally, store it in the database.

希望对您有所帮助 - 如果您有更多问题,请告诉我。

凯文

关于php - 从 twilio 收到的电话号码格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8794171/

相关文章:

django - phonenumber@vtext.com 与 Twilio、Clickatell 等比较?

php - 意外的标记 < AJAX jquery

php - Mysql 查询花费太多时间

Mysql 使用 UNION 计算多个表上的 num 行

javascript - 如何在我的 View 中从查询中可视化 codeigniter 数组?

c# - 使用 C# 下载 Twilio 录音

php - Cookie 不会删除

php - 无法在 PHP 中检索 Apache 环境变量

mysql - 强制 MySQL 只使用 unix socket

php - Twilio 从网站向多个用户发送短信