2013-01-03 24 views
-2

以UTF-16我有一個像這樣在PHP中的字符串:轉換的混合串用PHP

INPUT =「Γιώργοανστείλειςαυτόακριβώς(:

它是一種混合字符串希臘語和拉丁語角色在同一時間,我想給定的字符串中的所有字符轉換爲這個字符串

輸出= 0022039303B903CE03C103B303BF002003B103BD002003C303C403B503AF03BB03B503B903C20020 03B103C503C403CC002003B103BA03C103B903B203CE03C200200028003A

我怎麼能輸入轉換爲這種輸出的?

+0

1)mb_convert_encoding()*是*一個有效的解決方案。 2)從什麼編碼轉換? –

+0

UTF-8到utf-16。我不明白你爲什麼降低這個問題。當然mb_convert是一個有效的解決方案,但在我的情況下不起作用。所以它不適合我。 –

+0

我沒有downvote你的問題。 downvoter沒有留下評論。 –

回答

5

我花了一段時間才能找出,但似乎你想要做的是一個UTF-8字符串轉換爲大寫的二進制達姆p的UTF-16代表。它是如此簡單:

$input = '"Γιώργο αν στείλεις αυτό ακριβώς (:'; 
$output = mb_strtoupper(bin2hex(mb_convert_encoding($input, 'UTF-16BE', 'UTF-8'))); 

BE後綴表示大端,這似乎根據你的例子是預期的字節順序。

+1

+1之一,但它可能最容易使用'UTF-16BE'而不用擔心endianess – Esailija

+0

@Esailija - 感謝您的提示,我已經將其納入答案。我沒有意識到這一點。 –

+0

謝謝Alvaro。那很完美。 :-) –

1

您是否嘗試過的iconv?也許是這樣的: (編輯)我理解你的主要目標是爲了能夠通過http被運送到服務這個轉換後的字符串,在這種情況下,你可以使用BASE64_ENCODE()的結果。 看到完整的代碼例如:

<?php 
    $string = str_replace(' ', '', "Γιώργο αν στείλεις αυτό ακριβώς"); 
    $converted = iconv('UTF-8', 'UTF-16', $string); 
    $encoded = base64_encode($converted); 

    var_dump($encoded); 
    var_dump(iconv('UTF-16', 'UTF-8', base64_decode($encoded))); 
?> 

你將得到:

編碼:字符串 '/ v8DkwO5A84DwQOzA78DsQO9A8MDxAO1A68DuwO1A7kDwgOxA8UDxAPMA7EDugPBA7kDsgPOA8I ='(長度= 76) 解碼:字符串 'Γιώργοανστείλειςαυτόακριβώς'(長度= 54 )

+0

字符串' '(長度= 60)。這就是我得到的。字符串也應該混合(英文+希臘字符)。 –

+0

@GeorgeD。無論您在瀏覽器中看到什麼都不相關,除非您將其顯示爲UTF-16。 –

+0

當我顯示爲UTF-16 I得到這個 - >㰡䑏䍔奐䔠䡔䵌㸍਼桴浬慮朽≥渭啓∾ഊ㱨敡榨ഊ††㱭整慍舍慲獥琽≕呆ⴸ∾ഊ ††㱴楴汥㸼⽴楴汥㸍਼⽨敡榨ഊ㱢潤社ഊ††㱰牥⁣污獳㴧硤敢畧⵶慲ⵤ畭瀧⁤楲㴧汴爧㸼獺慬泛獴物涌㰯獺慬泛!景湴⁣潬潲㴧⍣挰〰〧㸧Γιώργο☣〻αν☣〻στείλεις☣〻αυτό☣〻ακριβώς✼⽦潮琾!椾⡬敮杴栽㘰⤼⽩㸊㰯灲放㰯扯摹㸍਼⽨瑭泛 –