2016-03-22 16 views
0

Ich benutze einen Online-SMS-Dienst (Clickatell) für eine Web-App, die ich benutze. Meine Hauptsprache ist Griechisch, also muss ich in meiner PHP-Datei den SMS-Text in UTF-16BE konvertieren, bevor ich es sende. Zum Beispiel muss ich den TextUTF8 Text und Zahlen in UTF16-BE für Clickatell umwandeln

"Το ραντεβού σας έχει μεταφερθεί στις 2016.12.12 και ώρα 18.25"

zu

03a403bf002003c103b103bd03c403b503b203bf03cd002003c303b103c2002003ad03c703b503b9002003bc03b503c403b103c603b503c103b803b503af002003c303c403b903c2002000310032002d00310032002d0032003000310036002003ba03b103b9002003ce03c103b1002000310038003a00320035

ich alles conver müssen konvertieren inluding Leerzeichen, Symbole und Zahlen. Ich habe ein paar PHP-Befehle gefunden, aber sie konvertieren nur den Text.

$text=strtoupper(str_replace(array('"', '\u'), array('',''), json_encode('Το ραντεβού σας έχει μεταφερθεί στις 12-12-2016 και ώρα 18:25'))); 

Wenn der obigen Code erhalte ich das folgende Ergebnis:

03A403BF 03C103B103BD03C403B503B203BF03CD 03C303B103C2 03AD03C703B503B9 03BC03B503C403B103C603B503C103B803B503AF 03C303C403B903C2 2016.12.12 03BA03B103B9 03CE03C103B1 18:25

Wenn Sie das Datum und die Uhrzeit merken als und alle Räume sind nicht in Unicode.

Kann mir jemand sagen, wie ich meine ganze Phrase in Unicode bekomme? Wie kann ich das mit PHP machen? Vielen Dank im Voraus

+0

den Code Bitte senden Sie bis jetzt haben. – BPS

+0

Bitte [bearbeiten] Sie die Frage und fügen Sie eine [mcve] von dem, was Sie bereits versucht haben und haben ein Problem mit. –

Antwort

1

Ich bin nicht sicher, was Sie unter „sie nur den Text konvertieren“, aber wenn Sie eine UTF-8 Zeichenfolge UTF-16BE zu konvertieren suchen, dann können Sie versuchen:

iconv('UTF-8', 'UTF-16BE', $string); 

oder ..

mb_convert_encoding($string, 'UTF-16BE', 'UTF-8'); 

Edit:

Da Sie jetzt einen Code geteilt haben, Ihre techni que für die Konvertierung ist nicht Sound, es sei denn, Sie wollen es wirklich dargestellt, wie Sie es haben. Ihr Ergebnis ist im Grunde eine hexadezimale Darstellung der einzelnen Bytes, nicht aber der Bytes selbst.

Edit 2:

Wenn Sie wirklich es in dem Format angegeben benötigen, die folgenden wird es für Sie tun:

$string = iconv('UTF-8', 'UTF-16BE', $string); // .. or mb_convert_encoding 
$converted = ''; 

for ($i = 0; $i < strlen($string); $i++) { 
    $converted .= sprintf('%02X', ord($string[$i])); 
} 
+0

Wenn ich den Code verwenden, die ich oben i das unten stehende Ergebnis zu erhalten hinzugefügt 03A403BF 03C103B103BD03C403B503B203BF03CD 03C303B103C2 03AD03C703B503B9 03BC03B503C403B103C603B503C103B803B503AF 03C303C403B903C2 2016.12.12 03BA03B103B9 03CE03C103B1 18.25 –

+0

Wenn Sie das Datum und die Uhrzeit sowie alle Räume werden nicht umgesetzt bemerken. Vielen Dank, ich habe versucht, Ihre Silution, aber ich bekomme komische Zeichen und Fragezeichen –

+0

'ASCII' Werte wurden Codepoints zugewiesen, die zurück zu ihrer ursprünglichen Codierung unter ASCII. 'UTF-8' ist abwärtskompatibel zu' ASCII'. 'UTF-16' verwendet 2/4 Byte zum Codieren von Codepunkten, 2 im Fall von BMP-Zeichen (einschließlich ASCII). Z.B.Wenn der Wert "5" codiert wird, wird "\ x00 \ x35" angezeigt. '\ x35' ist gültig für 'UTF-8' und repräsentiert auch' 5'. Das '\ x00' wird als' NULL' behandelt. –