Pergunta

Alguém pode me ajudar ? Como eu poderia obter personagens ucs2/hexecoded

Como 'Hello', retornará "00480065006C006C006F"

Estes são os valores codificados hexéxicos:

0048 = h 0065 = e 006c = l 006c = l 006f = o*

Também em árabe (! مرحبا عالم) retornará 06450631062d0628064b06270020063906270644064500200021

Como posso obter o UCS2 codificado no PHP?

Foi útil?

Solução

MB_CONVERT_ENCODING ($ STR, 'UCS-2', 'AUTO') Funciona corretamente para converter a string, mas você terá que fazer um trabalho extra para obter a saída adequada em um navegador.

Você precisará alterar o conjunto de caracteres da sua saída para corresponder ao UCS-2 para poder usar eco Para emitê -lo para uma página. Além disso, pode ser necessário definir o tipo de conteúdo por meio de um Meta Tag no cabeçalho também.

Incluí três exemplos aqui nas seguintes variantes Unicode: UCS-2, UTF-16 e UTF-8; Como nem todos eles trabalharam para mim sem ajustar o Internet Explorer. Pode ser necessário armazenar seus arquivos PHP no UTF-8 para obter resultados adequados. Além disso, estou em uma versão em inglês do Windows, por isso não posso inserir sua corda árabe no formulário RTL adequado. Sinto muito se sua corda está iluminada aqui. Garanto -lhe que, se você o substituir no local mencionado pelos meus comentários, você obterá o resultado adequado. Por fim, você pode ter problemas para visualizar o UCS-2 e o UTF-16 no Internet Explorer-parece haver algumas esquisitices quando a saída é recarregada por meio de um cache. No entanto, o Firefox 3.5.5 funcionou para todas as três codificações. Se você está falando sério sobre fazer um aplicativo, recomendo fortemente que você considere usar o UTF-8 em vez do UCS-2.

Versão UCS-2

Firefox 3.5.5 (OK, mas o Firefox diz que é UTF-16BE no meu teste.)
Internet Explorer 7.0 (não ok. Não detectou/converte o árabe corretamente.)

<?php
header('Content-Type: text/html; charset=UCS-2');
mb_http_output('UCS-2');
echo mb_convert_encoding('<html><head><meta http-equiv="Content-Type" content="text/html; charset=UCS-2" /></head><body>', 'UCS-2', 'auto');
echo mb_convert_encoding('encoding: ', 'UCS-2', 'auto');
echo mb_convert_encoding(mb_http_output(), 'UCS-2', 'auto');
echo mb_convert_encoding('<br />', 'UCS-2', 'auto');
// NOTE: Replace the string here with your phrase
$strTerm = '!مرحبا عالم';
echo mb_convert_encoding('$strTerm = '.$strTerm.'<br />', 'UCS-2', 'auto');
echo mb_convert_encoding('query string: '.$_SERVER['QUERY_STRING'].'<br />', 'UCS-2', 'auto');
echo mb_convert_encoding('original hex: '.bin2hex($strTerm).'<br />', 'UCS-2', 'auto');
echo mb_convert_encoding('transformed hex: '.bin2hex(mb_convert_encoding($strTerm, 'UCS-2', 'auto')).'<br />', 'UCS-2', 'auto');
echo mb_convert_encoding('</body>', 'UCS-2', 'auto');
?>

Versão UTF-16

Firefox 3.5.5 (100% OK)
Internet Explorer 7.0 (Fail. Pode ter que especificar uma ordem de byte.)

<?php
header('Content-Type: text/html; charset=UTF-16');
mb_http_output('UTF-16');
echo mb_convert_encoding('<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-16" /></head><body>', 'UTF-16', 'auto');
echo mb_convert_encoding('encoding: ', 'UTF-16', 'auto');
echo mb_convert_encoding(mb_http_output(), 'UTF-16', 'auto');
echo mb_convert_encoding('<br />', 'UTF-16', 'auto');
// NOTE: Replace the string here with your phrase
$strTerm = '!مرحبا عالم';
echo mb_convert_encoding('$strTerm = '.$strTerm.'<br />', 'UTF-16', 'auto');
echo mb_convert_encoding('query string: '.$_SERVER['QUERY_STRING'].'<br />', 'UTF-16', 'auto');
echo mb_convert_encoding('original hex: '.bin2hex($strTerm).'<br />', 'UTF-16', 'auto');
echo mb_convert_encoding('transformed hex: '.bin2hex(mb_convert_encoding($strTerm, 'UTF-16', 'auto')).'<br />', 'UTF-16', 'auto');
echo mb_convert_encoding('</body>', 'UTF-16', 'auto');
?>

UTF-8

Firefox 3.5.5 (100% OK)
Internet Explorer 7.0 (100% OK)

<?php
header('Content-Type: text/html; charset=UTF-8');
mb_http_output('UTF-8');
echo mb_convert_encoding('<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body>', 'UTF-8', 'auto');
echo mb_convert_encoding('encoding: ', 'UTF-8', 'auto');
echo mb_convert_encoding(mb_http_output(), 'UTF-8', 'auto');
echo mb_convert_encoding('<br />', 'UTF-8', 'auto');
// NOTE: Replace the string here with your phrase
$strTerm = '!مرحبا عالم';
echo mb_convert_encoding('$strTerm = '.$strTerm.'<br />', 'UTF-8', 'auto');
echo mb_convert_encoding('query string: '.$_SERVER['QUERY_STRING'].'<br />', 'UTF-8', 'auto');
echo mb_convert_encoding('original hex: '.bin2hex($strTerm).'<br />', 'UTF-8', 'auto');
echo mb_convert_encoding('transformed hex: '.bin2hex(mb_convert_encoding($strTerm, 'UTF-8', 'auto')).'<br />', 'UTF-8', 'auto');
echo mb_convert_encoding('</body>', 'UTF-8', 'auto');
?>

Outras dicas

De acordo com esta página da web, o módulo de string de vários bytes (MBString) suporta UCS-2. Depois de ativar este módulo, você pode usar a função mb_convert_encoding para converter uma string de uma codificação para a outra.

Citando o Documentação da função MB_CONVERT_ENCODING:

string mb_convert_encoding  ( string $str  , string $to_encoding  [, mixed $from_encoding  ] )
Converts the character encoding of string str to to_encoding from optionally from_encoding . 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top