2015-12-14 10 views
3

У меня есть входной строки (URL-кодировке):закодировать с высокой точкой кода (> U + FFFF) для HTML сущностей

% F0% 9F% 98% 8E

, которые декодируются является emoji "".

Как я могу преобразовать это в HTML-код 😎?

http://unicode.online-toolz.com/tools/unicode-html-entities-convertor.php

этот сайт делает именно то, что мне нужно.

+0

Просто реализовать его самостоятельно, это легко: https://en.wikipedia.org/wiki/UTF -8 # Описание – zerkms

ответ

2
<?php 

function mb_ord($char, $encoding = 'UTF-8') { 
    if ($encoding === 'UCS-4BE') { 
     list(, $ord) = (strlen($char) === 4) ? @unpack('N', $char) : @unpack('n', $char); 
     return $ord; 
    } else { 
     return mb_ord(mb_convert_encoding($char, 'UCS-4BE', $encoding), 'UCS-4BE'); 
    } 
} 

function mb_htmlentities($string, $hex = false, $encoding = 'UTF-8') { 
    return preg_replace_callback('/[\x{80}-\x{10FFFF}]/u', function ($match) use ($hex) { 
     return sprintf($hex ? '&#x%X;' : '&#%d;', mb_ord($match[0])); 
    }, $string); 
} 


echo mb_htmlentities(urldecode('%F0%9F%98%8E')); 

Это вернет &#128526;

(. Примечание, этот ответ основан на a modified version of functions provided by this answer here)

+0

работает как очарование, теперь большое спасибо человеку. –

+0

если я передаю эту функцию URL-адрес http://example.com/abc+xyz, он изменит на http://example.com/abc xyz любые идеи, которые я мог бы обработать с помощью этого –

+1

@AbdulMannan, который вы могли бы заменить do str_replace ('+ ','% 20 '), запустите 'mb_htmlentities', а затем преобразуйте обратно'% 20 'в' + '. Вы можете попытаться избавиться от функции «urldecode» (поскольку это то, что вызывает преобразование знака плюс в пространство), но это может вызвать проблемы с mb_htmlentities. YMMV :) – timgws