2016-03-22 45 views
0

Kullandığım bir web uygulaması için çevrimiçi bir sms servisi (Clickatell) kullanıyorum. Benim ana dilim Yunanca, bu yüzden göndermeden önce php dosyasında sms metnini UTF-16BE'ye dönüştürmem gerekiyor. Mesela ben ben inluding herşeyi conver gerekirUTF8 Metin ve Numaralarını Clickatell için UTF16-BE'ye Dönüştürme

"Το ραντεβού σας έχει μεταφερθεί στις 2016/12/12 και ώρα 18:25"

için

03a403bf002003c103b103bd03c403b503b203bf03cd002003c303b103c2002003ad03c703b503b9002003bc03b503c403b103c603b503c103b803b503af002003c303c403b903c2002000310032002d00310032002d0032003000310036002003ba03b103b9002003ce03c103b1002000310038003a00320035

metni dönüştürmek gerekir uzaylar, semboller ve sayılar. Birkaç php komutu buldum ama sadece metni dönüştürüyorlar.

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

Yukarıdaki kodu kullanarak zaman aşağıda sonuç almak: Eğer tarih ve saati olarak fark ederseniz

03A403BF 03C103B103BD03C403B503B203BF03CD 03C303B103C2 03AD03C703B503B9 03BC03B503C403B103C603B503C103B803B503AF 03C303C403B903C2 2016/12/12 03BA03B103B9 03CE03C103B1 18:25

tüm boşluklar unicode değildir.

Bütün ifademi nasıl unicode'a aldığımı söyleyen var mı? Bunu php ile nasıl yapabilirim? sana "Onlar yalnızca metin dönüştürüyoruz.END_STRONG" ile ne demek emin değilim önceden

+0

o ana kadar sahip kod gönderin. – BPS

+0

Lütfen soruyu [düzenleyin] ve daha önce denediğiniz ve bir sorunla karşılaştığınız bir [mcve] ekleyin. i yukarıda eklenen kod kullandığınızda tarih ve saati de tüm alanlarda dönüştürülmez fark ederseniz –

cevap

1

teşekkürler, ancak UTF-16BE bir UTF-8 dize dönüştürmek için arıyorsanız, o zaman deneyebilirsiniz:

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

ya ..

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

Düzenleme:

şimdi bazı kod paylaştım yana

, senin techni Gerçekten sizin istediğiniz gibi temsil edilmesini istemediğiniz sürece, dönüşüm için que ses değildir. Sonuç, temel olarak, baytların kendileri değil, baytların onaltılık temsilidir.

Düzenleme 2: gerçekten belirtilen biçimde ihtiyaç varsa

, aşağıdakiler sizin için yapacağım:

$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

i aşağıda bir sonuç 03A403BF 03C103B103BD03C403B503B203BF03CD 03C303B103C2 03AD03C703B503B9 03BC03B503C403B103C603B503C103B803B503AF 03C303C403B903C2 2016/12/12 03BA03B103B9 03CE03C103B1 18:25 –

+0

olsun. Teşekkür ederim, silemenizi denedim ama garip karakterler alıyorum ve soru işaretleri –

+0

'ASCII' değerlerine ASCII altında orijinal kodlamalarına bağlanan kod noktaları verildi. 'UTF-8', ASCII ile geriye doğru uyumludur. UTF-16, BMP karakterlerinde (ASCII dahil) kod noktalarını kodlamak için 2/4 bayt kullanır. Örneğin.'5' değerini kodlamak '\ x00 \ x35' içinde sonuçlanır. '\ x35',' UTF-8' olarak geçer ve '5’i de temsil eder. '\ X00'' NULL' olarak değerlendirilir. –