如何编码法语/西班牙语字符使用clickatell的http api?

时间:2010-11-29 15:44:48

标签: php http sms url-encoding clickatell

我认为你们中的一些人有使用Clickatell的经验。我的问题是:当我使用法语或西班牙语字符(URL编码)通过他们的http api发送消息时,他们不会在手机上显示(字符)。

我正在使用此指南 - : http:// support.clickatell.com /faq.php?mode=view_entry&kbid=121&kbcat=26

我已经用几部手机对它进行了测试,它们都显示出相同的结果:“一个人!我的一个人?” 应该是“çava!monélèvemiiña?” (或类似的东西)

不幸的是他们的支持并不是很具体(对我而言),现在我有点困惑,这就是我得到的:

请参阅:http://www.dreamfabric.com/sms/default_alphabet.html

此后,请根据上述标准对您的text =参数进行编码,以便在您的手机上正确显示您的法语字符。

4 个答案:

答案 0 :(得分:7)

基本上使用SMS,您有两种发送文本的选项:使用GSM 03.38中指定的“默认字母”或使用Unicode。

默认字母表是在大多数西方国家发送短信的常用方式,因为它为该地区的语言提供了可接受的子集。它是一个7位编码,因此您可以在140个可用字节中容纳160个字符。 “最多”,因为此编码使用多个表。您可以通过在字符前加上escape(s)(0x1B)来访问扩展表中的字符。因此,如果您主要使用第一个表,则7位编码可以保存位置。

另一种选择是使用Unicode(特别是UCS-2)。显然,这会给你一个更广泛的字符集,但代价是空间:每个字符使用两个字节,这个编码会让你有70个字符的限制。

我不能代表Clickatell,因为我从未使用它们,但是一些提供商为您提供了一个抽象API,让您使用流行的编码,如ISO-8859-1(“latin-1”)。在某些时候,这仍然被重新编码为7位默认字母表。甚至可以应用一些映射规则,例如,使用'è'而不是'é',因为前者看起来几乎相同,并且在默认字母表中。当然,如果您想要完全控制内容,那么您需要使用一个API来传输以GSM默认字母表编码的文本。

答案 1 :(得分:2)

这是一些解决方法。带有'^'的所有字符都将被常规字母替换:

$message = 'éàçùêâôûîï';
$message = urlencode(utf8_decode($message));

收到的短信将如下所示:

éàcùeaouii

答案 2 :(得分:0)

我建议使用Latin 1编码,可能不是百分之百,但它是你最接近的。 http://www.w3schools.com/PHP/func_string_htmlentities.asp

答案 3 :(得分:0)

实际上,我只使用$ message = utf8_encode($ cvPath); // $ cvpath表示网址。它可以成功。感谢您的想法分享。 ^^