Je réécris le code Clickatell pour Vtiger 6 afin qu'il puisse accueillir UTF-8 caractères étendus. J'utilise le turc. J'utilise le code ci-dessous pour la conversion. J'espère que vous pouvez porter.
/**
* Function to handle UTF-8 Check and conversion
* @author Nuri Unver
*
*/
public function smstxtcode($data){
$mb_hex = '';
$utf = 0;
for($i = 0 ; $i<mb_strlen($data,'UTF-8') ; $i++){
$c = mb_substr($data,$i,1,'UTF-8');
$o = unpack('N',mb_convert_encoding($c,'UCS-4BE','UTF-8'));
$hx = sprintf('%04X',$o[1]);
$utf += intval(substr($hx,0,2));
$mb_hex .= $hx;
}
if ($utf>0)
{
$return=$mb_hex;
$utf=1;
}
else
{
$return=utf8_decode($data);
$utf=0;
}
return array($utf,$return);
}
Vous appelez cette fonction avec votre message. La réponse que vous obtenez est un tableau indiquant d'envoyer un texte unicode ou normal selon le message et le texte à envoyer. S'il n'y a pas de caractères étendus, il l'envoie simplement en texte brut avec unicode = 0 afin de sauvegarder les caractères. Si le message contient des caractères étendus, il convertit le message en code hexadécimal et l'envoie en tant qu'unicode.
Ce code fait simplement les calculs. Vous devez implémenter votre propre code pour le porter sur votre système. Pour la démonstration c'est le code que j'utilise pour Vtiger extraire les données et envoyer le message:
/**
* Function to handle SMS Send operation
* @param <String> $message
* @param <Mixed> $toNumbers One or Array of numbers
*/
public function send($message, $toNumbers) {
if(!is_array($toNumbers)) {
$toNumbers = array($toNumbers);
}
$params = $this->prepareParameters();
$smsarray = $this->smstxtcode($message);
$params['text'] = $smsarray[1];
$params['unicode'] = $smsarray[0];
$params['to'] = implode(',', $toNumbers);
$serviceURL = $this->getServiceURL(self::SERVICE_SEND);
Est-ce que la documentation Clickatell spécifier tout codage? Cela peut également varier selon la langue/le transporteur et/ou le téléphone de réception. – deceze
Je n'ai vu aucun détail d'encodage spécifique dans les documents clickatell. En ce moment, je suis à court d'idées sur ce qu'il faut essayer :) :) Merci pour la réponse – pinaki