SMS Unicode & amp; Codage GSM en PHP
(Mis à jour un peu)
Je ne suis pas très expérimenté avec l'internationalisation à l'aide de PHP, il faut le dire, et une partie de la recherche n'a pas vraiment fournir les réponses que je cherchais.
Je suis dans le besoin d'un moyen fiable pour convertir uniquement "' texte en Unicode pour envoyer un message SMS, à l'aide de PHP (seulement temporairement, tandis qu'un service est réécrite en utilisant C#) - évidemment, les messages envoyés à l'heure actuelle sont envoyés en texte clair.
Je pourrait tout convertir le jeu de caractères Unicode (par opposition à l'aide de la norme GSM charset), mais cela signifierait que tous messages serait limité à 70 caractères (au lieu de 160).
Donc, je crois que ma vraie question est: quel est le moyen le plus fiable pour détecter l'exigence d'un message encodé en Unicode, donc je n'ai qu'à le faire quand il est absolument nécessaire (par exemple, pour les non-latine-les caractères de la langue)?
Ajout D'Infos:
Ok, donc j'ai passé la matinée à travailler sur ce point, et je ne suis toujours pas plus loin que quand j'ai commencé (certainement dû à mon absence totale de compétence quand il s'agit de conversion de jeux de caractères). Voici donc la version révisée du scénario:
J'ai des SMS, des messages provenant d'une source externe, cette source externe fournit les réponses à m'en texte brut + unicode barre-des caractères d'échappement. E. g. le "affiché" du texte:
Nous allons tester öäü éàè אין תמיכה בעברית
Retourne:
Nous allons tester \u00f6\u00e4\u00fc \u00e9\u00e0\u00e8 \u05d0\u05d9\u05df \u05ea\u05de\u05d9\u05db\u05d4 \u05d1\u05e2\u05d1\u05e8\u05d9\u05ea
Maintenant, je peux envoyer mon fournisseur SMS en clair, GSM 03.38 ou Unicode. De toute évidence, l'envoi de la ci-dessus en clair les résultats dans beaucoup de caractères manquants (ils sont remplacés par des espaces par mon fournisseur) - je besoin pour s'adapter relatives à ce contenu, il est. Ce que je veux ne avec ce est la suivante:
- Si tout le texte est à l'intérieur de la GSM 03.38 page de codesenvoyez-le comme ça. (Mais tous les caractères hébreux ci-dessus correspondent à cette catégorie, mais ont besoin d'être convertis.)
- Autrement, de les convertir en Unicode, et de l'envoyer plus de messages multiples (comme l'Unicode limite est de 70 caractères n'est pas 160 pour un SMS).
Comme je l'ai dit ci-dessus, je suis perplexe sur le fait de faire cela en PHP (C# n'est pas vraiment un problème en raison des fonctions de conversion intégré), mais il est très probable que je suis en manque juste l'évidence, ici. Je ne pouvais pas trouver tout de pré-faites la conversion des classes pour les 7 bits de codage en PHP, soit - et mes tentatives de convertir la chaîne de moi-même et l'envoyer sur semblait futile.
Toute aide serait grandement appréciée.
source d'informationauteur James B
Vous devez vous connecter pour publier un commentaire.
De traiter avec elle sur le plan conceptuel avant d'entrer dans les mécanismes, et toutes mes excuses si tout cela est évident, une chaîne de caractères peut être définie comme une séquence de caractères Unicode Unicode étant une base de données qui vous donne un numéro d'identification connu comme un point de code de chaque caractère que vous pourriez avoir besoin de travailler avec. GSM-338 contient un sous-ensemble des caractères Unicode, donc ce que vous faites, c'est d'extraire un ensemble de codepoints à partir de votre chaîne, et vérifier pour voir si l'ensemble est contenu dans le GSM-338.
Qui laisse la définition de la fonction codepoints($string), qui n'est pas intégré dans PHP. PHP comprend une chaîne à une séquence d'octets plutôt que d'une séquence de caractères Unicode. La meilleure façon de combler le fossé est d'obtenir vos chaînes de caractères en UTF8 aussi rapidement que vous le pouvez et de les garder en UTF8 aussi longtemps que vous pouvez - vous devez utiliser d'autres encodages lorsque vous traitez avec des systèmes externes, mais d'isoler la conversion à l'interface de ce système et de traiter seulement avec l'utf8 en interne.
Les fonctions dont vous avez besoin pour convertir entre chaînes de php en utf8 et des séquences de codepoints peut être trouvé à http://hsivonen.iki.fi/php-utf8/ , de sorte que votre codepoints() fonction.
Si vous êtes à la prise de données à partir d'une source externe qui vous donne Unicode barre-des caractères d'échappement ("nous allons test \u00f6\u00e4\u00fc..."), cette chaîne s'échapper format doit être converti en utf8. Je ne sais pas désinvolte d'une fonction pour ce faire, si on ne peut pas être trouvé, c'est une question de chaîne/regex traitement + l'utilisation de la hsivonen.iki.fi des fonctions, par exemple lorsque vous appuyez sur \ \ u00f6, de le remplacer avec de l'utf8 représentation de la codepoint 0xf6.
Bien que c'est un vieux thread, j'ai récemment eu à résoudre un problème très similaire et je voulais poster ma réponse. Le code PHP est un peu simple. Il commence avec un minutieusement large gamme de GSM valide les codes de caractères dans un tableau, puis vérifie simplement si le caractère courant est dans ce tableau à l'aide de la ord($string) de la fonction qui retourne la valeur ascii du premier caractère de la chaîne de caractères passée. Voici le code que j'utilise pour valider si une chaîne est GSM en vaut la peine.
PHP6 auront un meilleur support de l'unicode, mais il existe quelques fonctions que vous pouvez utiliser.
Ma première pensée a été
mb_convert_encoding
mais comme vous l'avez dit cela permettra de raccourcir les messages à 70 caractères alors peut - être que vous pouvez l'utiliser en conjonction avecmb_detect_encoding
?Voir: Fonctions Multi-Octets
ou