PHP 将表情符号保留为 unicode,但也将文本保留为纯文本
PHP keep emoji in unicode but also keep text as plain text
我有将表情符号转换为 unicode 的功能,但它也会将文本转换为十六进制。
如何只转换表情符号而将文本保留为纯文本字符串?
function emoji_to_unicode($emoji) {
$emoji = mb_convert_encoding($emoji, 'UTF-32', 'UTF-8');
$unicode = strtoupper(preg_replace("/^[0]{3}/","U+",bin2hex($emoji)));
return $unicode;
}
$var = ("xtext here");
$out = '';
for ($i = 0; $i < mb_strlen($var); $i++) {
$out .= emoji_to_unicode(mb_substr($var, $i, 1));
}
echo "$out\n";
所以
$var = ("xtext here");
Returns 对我来说:
U+1F600U+00078U+1F600U+00074U+00065U+00078U+00074U+00020U+00068U+00065U+00072U+00065
但我需要 return 这样的:
U+1F600xU+1F600text here
我需要将文本保持为纯文本,但还要将表情符号保持为 unicode 格式。
Intl 扩展提供了与 unicode codepoints and blocks 一起使用的功能,可以让您确定当前字符是否是表情符号。
function emoji_to_unicode($emoji) {
$emoji = mb_convert_encoding($emoji, 'UTF-32', 'UTF-8');
$unicode = strtoupper(preg_replace("/^[0]{3}/","U+",bin2hex($emoji)));
return $unicode;
}
$var = ("xtext here");
$out = '';
for ($i = 0; $i < mb_strlen($var); $i++) {
$char = mb_substr($var, $i, 1);
$isEmoji = IntlChar::getBlockCode(IntlChar::ord($char)) == IntlChar::BLOCK_CODE_EMOTICONS;
$out .= $isEmoji ? emoji_to_unicode($char) : $char;
}
echo $out;
这是 predefined constants 的列表,您可以在其中找到所有块。
我有将表情符号转换为 unicode 的功能,但它也会将文本转换为十六进制。
如何只转换表情符号而将文本保留为纯文本字符串?
function emoji_to_unicode($emoji) {
$emoji = mb_convert_encoding($emoji, 'UTF-32', 'UTF-8');
$unicode = strtoupper(preg_replace("/^[0]{3}/","U+",bin2hex($emoji)));
return $unicode;
}
$var = ("xtext here");
$out = '';
for ($i = 0; $i < mb_strlen($var); $i++) {
$out .= emoji_to_unicode(mb_substr($var, $i, 1));
}
echo "$out\n";
所以
$var = ("xtext here");
Returns 对我来说:
U+1F600U+00078U+1F600U+00074U+00065U+00078U+00074U+00020U+00068U+00065U+00072U+00065
但我需要 return 这样的:
U+1F600xU+1F600text here
我需要将文本保持为纯文本,但还要将表情符号保持为 unicode 格式。
Intl 扩展提供了与 unicode codepoints and blocks 一起使用的功能,可以让您确定当前字符是否是表情符号。
function emoji_to_unicode($emoji) {
$emoji = mb_convert_encoding($emoji, 'UTF-32', 'UTF-8');
$unicode = strtoupper(preg_replace("/^[0]{3}/","U+",bin2hex($emoji)));
return $unicode;
}
$var = ("xtext here");
$out = '';
for ($i = 0; $i < mb_strlen($var); $i++) {
$char = mb_substr($var, $i, 1);
$isEmoji = IntlChar::getBlockCode(IntlChar::ord($char)) == IntlChar::BLOCK_CODE_EMOTICONS;
$out .= $isEmoji ? emoji_to_unicode($char) : $char;
}
echo $out;
这是 predefined constants 的列表,您可以在其中找到所有块。