Non, non, non et non ! Je confirme également !
J'ai envoyé depuis le manager un message contenant 150 caractères dont des spéciaux comme "ç" : 2 SMS en moins !
Et la meilleure c'est qu'OVH ne le sait même pas ! Ils sont persuadés qu'un '€', un 'ç' ou un 'a' ont la même valeur ! C'EST FAUX ! Et je suis même sûr que leur problème de caractère spécial y est lié !
Alors pour ceux qui veulent prendre un peu d'avance sur le staff technique, j'ai trouvé des infos (OVH vous n'êtes pas dispensé de prendre des notes ...)
L'alphabet GSM est codé sur 7 bits et contient les caractères suivant :
"
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN OPQRSTUVWXYZÄäàÅåÆæßÇèéÉìÖöòØøÑñÜüù#¤%&()*+,-./:;<>=§$!?£¿¡@¥Δ_ΦΓΛΩΠΨΣΘΞ"' "
(ne pas oublier le ', le " et l'espace qui sont à la fin)
Ils valent 1 caractère, on est d'accord.
Les caractères suivants valent pour 2 caractères :
\[]{}~^|€
Ils comptent donc double !
Maintenant vous vous dites qu'il en manque encore, et c'est là que ca devient important :
Si vous tapez n'importe quel autre caractère que ceux précédemment énoncés,
le SMS n'est plus encodé en alphabet GSM 7bits classique mais en UNICODE ! C'est l'opérateur mobile qui décide et pas OVH !
Dans ce cas là, vous n'avez plus que 70 caractères pour votre SMS et tous les caractères valent 1 sans exceptions !! Si vous dépassez 70 caractères vous serez débité de 2 SMS (ou plus)
Pour résumé :
Soit vous tapez des caractères normaux qui valent UN
Soit vous tapez des caractères spéciaux qui valent DEUX
Soit vous tapez n'importe quel autre caractère alors tous les caractères vaudront UN mais vous n'en aurez droit qu'à 70 !
OVH, vous n'êtes pas encore opérateur mobile, ce n'est pas vous qui décidez des règles d'envois ! Pour une entreprise de votre ampleur ce n'est vraiment pas sérieux, je pèse mes mots... Je ne vais pas aller jusqu'à demander un remboursement de mes SMS débités en trop mais ca me démange...
source :
http://www.nowsms.com/discus/messages/1/1103.html
Et pour les intéressés j'ai fait un compteur PHP (à vous d'adapter, moi c'est un script php appelé par AJAX et qui me renvoit le nombrà de char restant pour l'afficher a coté de mon textarea)
Code PHP:
$message = stripslashes($_POST['message']); // Réception du message en POST (UTF-8)
$compteur = 160;
if($message != '')
{
// Vaut 1 caractère en alphabet GSM
$one = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZÄäàÅåÆæßÇèéÉìÖöòØøÑñÜüù#¤%&()*+,-./:;<>=§$!?£¿¡@¥Δ_ΦΓΛΩΠΨΣΘΞ"\' '; // Attention au ' et son antislash d'échappement ainsi qu'à l'espace en dernier caractère !
// Vaut 2 caractères en alphabet GSM
$two = '\[]{}~^|€';
$tab_message = array();
while($message != '')
{
$tab_message[] = mb_substr($message,0,1,'utf-8');
$message = mb_substr($message,1,mb_strlen($message,'utf-8'),'utf-8');
}
// 1 J'aurais pu utiliser "str_split($message)" MAIS str_split n'est pas compatible UTF-8
// 2 J'aurais pu convertir la chaine en iso avec utf8_decode MAIS l'iso n'a pas le symbole euro € :)
$mode70 = false;
foreach($tab_message as $lettre){
if(strstr($two, $lettre)) // Si le caractère vaut 2
$compteur = $compteur - 2;
elseif(strstr($one, $lettre)) // Si le caractère vaut 1
$compteur--;
else // Sinon on passe en format Unicode (70 caractère max)
{
$mode70 = true;
break;
}
}
if($mode70)
$compteur = 70 - count($tab_message);
}
$nb_caractere_restant = $compteur;
?>
En tout cas je l'ai testé, il fonctionne. A vous d'adapter.