2015-12-14 43 views

回答

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你可以替換做一個str_replace('+ ','%20'),運行'mb_htmlentities',然後將'%20'轉換回'+'。你可以試着擺脫'urldecode'函數(因爲這是導致加號被轉換爲空格的原因),但這可能會導致mb_htmlentities問題。 YMMV :) – timgws