兑换 ? ?使用 PHP 到 HTML 中的表情符号
Convert � � to Emoji in HTML using PHP
我们有一堆代理对(或 2 字节 utf8?)字符,例如 ��
,这是作为 2 个字符存储为 UTF8 的祈祷之手表情符号。在浏览器中呈现时,此字符串呈现为两个 ??
示例:????
我需要使用 php 将它们转换为 emjoi 手,但我根本找不到 iconv、utf8_decode、html_entity_decode 等的组合来实现它。
此站点正确转换 ��
:
http://www.convertstring.com/EncodeDecode/HtmlDecode
在其中粘贴以下字符串
Please join me in this prayer. ��❤️
您会注意到代理对???? (��
) 转换为
此站点声称使用 HTMLDecode,但我在 php 中找不到任何内容来实现此目的。我努力了:
图标
html_entity_decode
和一些 public 个图书馆。
我承认在转换字符编码方面我不是专家!
我找不到执行此操作的函数,但这个有效:
$str = "Please join me in this prayer. ��❤️";
$newStr = preg_replace_callback("/&#.....;&#.....;/", function($matches){return convertToEmoji($matches);}, $str);
print_r($newStr);
function convertToEmoji($matches){
$newStr = $matches[0];
$newStr = str_replace("&#", '', $newStr);
$newStr = str_replace(";", '##', $newStr);
$myEmoji = explode("##", $newStr);
$newStr = dechex($myEmoji[0]) . dechex($myEmoji[1]);
$newStr = hex2bin($newStr);
return iconv("UTF-16BE", "UTF-8", $newStr);
}
我想花点时间清理一下 TylerF 的工作代码。
代码:(3v4l.org Demo)
$str = "Please join me in this prayer. ��❤️";
echo preg_replace_callback(
"/&#(\d{5});&#(\d{5});/",
function($m) {
return iconv("UTF-16BE", "UTF-8", hex2bin(dechex($m[1]) . dechex($m[2])));
},
$str
);
原始输出:
Please join me in this prayer. ❤️
当前输出:
Warning: iconv(): Wrong encoding, conversion from "UTF-16BE" to "UTF-8" is not allowed
- 改点为数字字符匹配,采用捕获组简化后续流程。
- 自定义函数中不再有
str_replace()
或 explode()
调用。
- 没有一次性变量声明。
与 PHP7.4 箭头函数语法 (Sandbox demo that actually works) 相同的技术:
$str = "Please join me in this prayer. ��❤️";
var_export(
preg_replace_callback(
"/&#(\d{5});&#(\d{5});/",
fn($m) => iconv("UTF-16BE", "UTF-8", hex2bin(dechex($m[1]) . dechex($m[2]))),
$str
)
);
我们有一堆代理对(或 2 字节 utf8?)字符,例如 ��
,这是作为 2 个字符存储为 UTF8 的祈祷之手表情符号。在浏览器中呈现时,此字符串呈现为两个 ??
示例:????
我需要使用 php 将它们转换为 emjoi 手,但我根本找不到 iconv、utf8_decode、html_entity_decode 等的组合来实现它。
此站点正确转换 ��
:
http://www.convertstring.com/EncodeDecode/HtmlDecode
在其中粘贴以下字符串
Please join me in this prayer. ��❤️
您会注意到代理对???? (��
) 转换为
此站点声称使用 HTMLDecode,但我在 php 中找不到任何内容来实现此目的。我努力了: 图标 html_entity_decode 和一些 public 个图书馆。
我承认在转换字符编码方面我不是专家!
我找不到执行此操作的函数,但这个有效:
$str = "Please join me in this prayer. ��❤️";
$newStr = preg_replace_callback("/&#.....;&#.....;/", function($matches){return convertToEmoji($matches);}, $str);
print_r($newStr);
function convertToEmoji($matches){
$newStr = $matches[0];
$newStr = str_replace("&#", '', $newStr);
$newStr = str_replace(";", '##', $newStr);
$myEmoji = explode("##", $newStr);
$newStr = dechex($myEmoji[0]) . dechex($myEmoji[1]);
$newStr = hex2bin($newStr);
return iconv("UTF-16BE", "UTF-8", $newStr);
}
我想花点时间清理一下 TylerF 的工作代码。
代码:(3v4l.org Demo)
$str = "Please join me in this prayer. ��❤️";
echo preg_replace_callback(
"/&#(\d{5});&#(\d{5});/",
function($m) {
return iconv("UTF-16BE", "UTF-8", hex2bin(dechex($m[1]) . dechex($m[2])));
},
$str
);
原始输出:
Please join me in this prayer. ❤️
当前输出:
Warning: iconv(): Wrong encoding, conversion from "UTF-16BE" to "UTF-8" is not allowed
- 改点为数字字符匹配,采用捕获组简化后续流程。
- 自定义函数中不再有
str_replace()
或explode()
调用。 - 没有一次性变量声明。
与 PHP7.4 箭头函数语法 (Sandbox demo that actually works) 相同的技术:
$str = "Please join me in this prayer. ��❤️";
var_export(
preg_replace_callback(
"/&#(\d{5});&#(\d{5});/",
fn($m) => iconv("UTF-16BE", "UTF-8", hex2bin(dechex($m[1]) . dechex($m[2]))),
$str
)
);