【问题标题】:Encode a high code point (> U+FFFF) to HTML entities将高代码点 (> U+FFFF) 编码为 HTML 实体
【发布时间】:2015-12-14 12:36:09
【问题描述】:

我有一个输入字符串(URL 编码):

%F0%9F%98%8E

解码的是表情符号“??????”。

如何将其转换为 HTML-Code😎

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

这个网站正是我所需要的。

【问题讨论】:

标签: php utf-8 html-entities emoji


【解决方案1】:
<?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'));

这将返回&amp;#128526;

(请注意,此答案基于a modified version of functions provided by this answer here。)

【讨论】:

  • 如果我向这个函数传递一个 url example.com/abc+xyz 它会变成 example.com/abc xyz 任何我能处理的想法
  • @AbdulMannan 您可以替换执行 str_replace('+', '%20'),运行 mb_htmlentities,然后将 '%20' 转换回 '+'。您可以尝试摆脱 urldecode 函数(因为这是导致加号转换为空格的原因),但这可能会导致 mb_htmlentities 出现问题。 YMMV :)
  • 感谢@timgws 删除了 url 解码并解决了问题。
猜你喜欢
  • 2011-04-02
  • 1970-01-01
  • 1970-01-01
  • 2017-08-03
  • 2011-03-29
  • 2013-03-20
  • 2015-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多