Как преобразовать Unicode Charaters в Unicode десятичных объектов PHP? - PullRequest
1 голос
/ 07 сентября 2010

У меня есть символы Юникода в таблицах MySQL.Я буду печатать данные на веб-страницах.При печати на страницах я динамически генерирую кнопки «Поделиться», чтобы поделиться каждой записью в этой таблице (которая находится в пенджабском стиле).

Таким образом, вывод на странице выглядит нормально.Но при совместном использовании того же контента в «Share This» на странице назначения отображаются некоторые неизвестные символы.Позже я обнаружил, что данные, отправляемые через веб-сайты, должны быть в формате Unicode Entity (например, ਆ, это напечатает это '').

Теперь мои таблицы имеют такие значения, как ਜ ਝ ਞ ਟ ਠ ਡ ਢ .

Я хочу преобразовать эти данные как ਜ ਝ ਞ ਟ ਠ ਡ ਢ в PHP.

Пожалуйста, помогите мне в этом.


Вышеуказанная проблема исправлена.Но Share This по-прежнему создает проблемы при отображении символов Unicode.Ниже вывод в браузере.

<script type="text/javascript" src="http://w.sharethis.com/button/buttons.js"></script>`
<script type="text/javascript">
stLight.options({
    publisher:'12345'
});
</script>
<span class="st_facebook" st_title="&#2676;&#2616;&#2596;&#2623; &#2600;&#2622;&#2606;&#2625; &#2581;&#2608;&#2596;&#2622; &#2602;&#2625;&#2608;&#2582;&#2625; &#2600;&#2623;&#2608;&#2605;&#2569; &#2600;&#2623;&#2608;&#2613;&#2632;&#2608;&#2625; &#2565;&#2581;&#2622;&#2610; &#2606;&#2626;&#2608;&#2596;&#2623; &#2565;&#2588;&#2626;&#2600;&#2624; &#2616;&#2632;&#2605;&#2672; &#2583;&#2625;&#2608; &#2602;&#2637;&#2608;&#2616;&#2622;&#2598;&#2623; &#2405;" st_url="http://sitelink/"></span>

Заранее спасибо, Абу Ситик

Ответы [ 2 ]

2 голосов
/ 25 ноября 2015

Некоторое время назад я написал polyfill для отсутствующих многобайтовых версий ord и chr, имея в виду следующее:

  • Он определяет функции mb_ord иmb_chr только если они еще не существуют.Если они существуют в вашей инфраструктуре или в какой-либо будущей версии PHP, полизаполнение будет проигнорировано.

  • Для преобразования используется широко используемое расширение mbstring.Если расширение mbstring не загружено, вместо него будет использоваться расширение iconv.

Я также добавил функции для кодирования / декодирования и кодирования / декодирования HTMLentities в формат JSON.в качестве демонстрационного кода для использования этих функций


Код :

if (!function_exists('codepoint_encode')) {

    function codepoint_encode($str) {
        return substr(json_encode($str), 1, -1);
    }

}

if (!function_exists('codepoint_decode')) {

    function codepoint_decode($str) {
        return json_decode(sprintf('"%s"', $str));
    }

}

if (!function_exists('mb_internal_encoding')) {

    function mb_internal_encoding($encoding = NULL) {
        return ($from_encoding === NULL) ? iconv_get_encoding() : iconv_set_encoding($encoding);
    }

}

if (!function_exists('mb_convert_encoding')) {

    function mb_convert_encoding($str, $to_encoding, $from_encoding = NULL) {
        return iconv(($from_encoding === NULL) ? mb_internal_encoding() : $from_encoding, $to_encoding, $str);
    }

}

if (!function_exists('mb_chr')) {

    function mb_chr($ord, $encoding = 'UTF-8') {
        if ($encoding === 'UCS-4BE') {
            return pack("N", $ord);
        } else {
            return mb_convert_encoding(mb_chr($ord, 'UCS-4BE'), $encoding, 'UCS-4BE');
        }
    }

}

if (!function_exists('mb_ord')) {

    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');
        }
    }

}

if (!function_exists('mb_htmlentities')) {

    function mb_htmlentities($string, $hex = true, $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);
    }

}

if (!function_exists('mb_html_entity_decode')) {

    function mb_html_entity_decode($string, $flags = null, $encoding = 'UTF-8') {
        return html_entity_decode($string, ($flags === NULL) ? ENT_COMPAT | ENT_HTML401 : $flags, $encoding);
    }

}

Как использовать :

echo "\nGet string from numeric DEC value\n";
var_dump(mb_chr(25105));
var_dump(mb_chr(22909));

echo "\nGet string from numeric HEX value\n";
var_dump(mb_chr(0x6211));
var_dump(mb_chr(0x597D));

echo "\nGet numeric value of character as DEC int\n";
var_dump(mb_ord('我'));
var_dump(mb_ord('好'));

echo "\nGet numeric value of character as HEX string\n";
var_dump(dechex(mb_ord('我')));
var_dump(dechex(mb_ord('好')));

echo "\nEncode / decode to DEC based HTML entities\n";
var_dump(mb_htmlentities('我好', false));
var_dump(mb_html_entity_decode('&#25105;&#22909;'));

echo "\nEncode / decode to HEX based HTML entities\n";
var_dump(mb_htmlentities('我好'));
var_dump(mb_html_entity_decode('&#x6211;&#x597D;'));

echo "\nUse JSON encoding / decoding\n";
var_dump(codepoint_encode("我好"));
var_dump(codepoint_decode('\u6211\u597d'));

Выход :

Get string from numeric DEC value
string(3) "我"
string(3) "好"

Get string from numeric HEX value
string(3) "我"
string(3) "好"

Get numeric value of character as DEC string
int(25105)
int(22909)

Get numeric value of character as HEX string
string(4) "6211"
string(4) "597d"

Encode / decode to DEC based HTML entities
string(16) "&#25105;&#22909;"
string(6) "我好"

Encode / decode to HEX based HTML entities
string(16) "&#x6211;&#x597D;"
string(6) "我好"

Use JSON encoding / decoding
string(12) "\u6211\u597d"
string(6) "我好"
0 голосов
/ 07 сентября 2010

Вам, вероятно, следует использовать url_encode текст при выводе href вашего <a> тега.

...