2015-03-06 5 views
1

В PHP я хочу преобразовать строку, которая содержит символы, отличные от ASCII, в последовательность шестнадцатеричных чисел, которая представляет кодировку UTF-8 этих символов. Например, с учетом этого:PHP, преобразовать строку в UTF-8, а затем шестнадцатеричный

$text = 'ąćę'; 

Мне нужно производить это:

C4=84=C4=87=C4=99 

Как я могу это сделать?

+1

Что это за числа в точности? Что вы в конечном итоге делаете с ними? Вы можете использовать 'json_encode' на них, но вы не получите значения, которые вы упомянули. – mkaatman

+0

Я вынул какой-то неактуальный текст, прояснил вашу конечную цель, как я ее понимаю, и дал понять, что используемая строка - всего лишь пример. Теперь нам нужна дополнительная информация от вас, чтобы ответить на вопрос. 1: Эта кодировка с кодовым названием (http://en.wikipedia.org/wiki/Quoted-printable) вы собираетесь? 2: Должен быть знак равенства перед первым C4, да? 3: Что должно произойти с символами ASCII? (например, если строка была '' ± cę'' вместо этого, должна получиться '= C4 = 84 = 63 = C4 = 99', или' = C4 = 84c = C4 = 99'?) – zwol

+0

@mkaatman Я не проверьте, но я на 99% уверен, что C4 84 C4 87 C4 99 является шестнадцатеричным представлением каждого байта в кодировке UTF-8 символьной последовательности '±ćę' (то есть U + 0105 U + 0107 U + 0119). И примечание = XX выглядит подозрительно, как [MIME quoted-printable] (http://en.wikipedia.org/wiki/Quoted-printable) кодирование для меня. – zwol

ответ

2

Как ваш вопрос написано, и при условии, что текст правильно UTF-8 кодируются, чтобы начать с, это должно работать:

$text = 'ąćę'; 
$result = implode('=', str_split(strtoupper(bin2hex($text)), 2)); 

Если текст не UTF-8, но некоторые другие кодировки, то вы можете использовать

$utf8 = mb_convert_encoding($text, 'UTF-8', $yourEncoding); 

, чтобы получить его в UTF-8, где $yourEncoding есть некоторые другие кодировки символов, как 'ISO-8859-1'.

Это работает, потому что в PHP строки являются просто массивами байтов. Поэтому, пока ваш текст будет правильно закодирован, вам не нужно делать ничего особенного, чтобы рассматривать его как байты. Фактически, этот код будет работать для любой кодировки символов, которую вы хотите без изменений.

Теперь, если вы хотите сделать кавычки для печати, то это уже другая история. Вы можете попробовать использовать функцию quoted_printable_encode (требуется PHP 5.3 или выше).