php mysql保存unicode_关于mysql:使用PHP解析Unicode表情文字文件

Unicode组织提供了一个文本文件,其中包含表情符号的分类和名称详细信息。

最新版本可在此处获得:

http://unicode.org/Public/emoji/5.0/emoji-test.txt

每个表情符号都属于8个宽泛的Groups之一,然后每个Group分为多个子组-例如,下面列出了Animals & Nature组的子组:

# group: Smileys & People# group: Animals & Nature

# subgroup: animal-mammal    # subgroup: animal-bird    # subgroup: animal-amphibian    # subgroup: animal-reptile    # subgroup: animal-marine    # subgroup: animal-bug    # subgroup: plant-flower    # subgroup: plant-other

# group: Food & Drink# group: Travel & Places# group: Activities# group: Objects# group: Symbols# group: Flags

然后,将每个子组中的表情符号针对每个子组列出-例如,对于animal-bird子组,将列出以下表情符号:

1F983                                      ; fully-qualified     # ?? turkey1F414                                      ; fully-qualified     # ?? chicken1F413                                      ; fully-qualified     # ?? rooster1F423                                      ; fully-qualified     # ?? hatching chick1F424                                      ; fully-qualified     # ?? baby chick1F425                                      ; fully-qualified     # ?? front-facing baby chick1F426                                      ; fully-qualified     # ?? bird1F427                                      ; fully-qualified     # ?? penguin1F54A FE0F                                 ; fully-qualified     # ??? dove1F54A                                      ; non-fully-qualified # ?? dove1F985                                      ; fully-qualified     # ?? eagle1F986                                      ; fully-qualified     # ?? duck1F989                                      ; fully-qualified     # ?? owl

因此,每个表情符号都具有以下属性-以turkey表情符号为例:

组:动物与自然

亚组:动物爬行动物

名称:1F983

状态:完全合格

表情符号:??

描述:土耳其

我有一个MySQL表,我想在其中存储表情符号详细信息:

CREATE TABLE `xx_emoji` (

`fld_id` int(11) NOT NULL AUTO_INCREMENT,

`fld_group` varchar(255) DEFAULT NULL,

`fld_cat` varchar(255) CHARACTER SET utf8 DEFAULT NULL,

`fld_name` varchar(255) CHARACTER SET utf8 DEFAULT NULL,

`fld_status` varchar(255) CHARACTER SET utf8 DEFAULT NULL,

`fld_emoji` varbinary(255) DEFAULT NULL,

`fld_description` varchar(255) CHARACTER SET utf8 DEFAULT NULL,

PRIMARY KEY (`fld_id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4

我可以手动浏览文本文件并将详细信息一次保存到MySQL表中,这样我就可以在表中获取类似的数据-例如

dee563b9b0f807eb7dba46ef9fba5347.png

但是,我想知道是否可以使用PHP解析文本文件?

我想它需要一系列嵌套循环:

foreach group {

foreach subgroup {

loop through emoji list and save into MySQL table...

group

subgroup

name

status

emoji

description

end loop

}

}

我意识到这只是一个非常基本的概述,对于提出如此广泛的问题深感抱歉。

我在unicode网站上查看了表情符号数据是否可以以其他更有用的格式(例如XML或JSON)获得,但是我找不到任何东西,只能在当前的表情符号版本中看到:

https://unicode.org/Public/emoji/5.0/

她不是很漂亮,如果他们更改格式可能会折断,但是您可以按照下面的步骤进行操作,至少可以为您指明正确的方向:p

if (!file_exists('emoji-test.txt')) {

file_put_contents('emoji-test.txt', file_get_contents('http://unicode.org/Public/emoji/5.0/emoji-test.txt'));

}

// break into blocks

$blocks = explode(PHP_EOL.PHP_EOL, file_get_contents('emoji-test.txt'));

// unset header

unset($blocks[0]);

$emoji = [];

foreach ($blocks as $chunk) {

$top = explode(PHP_EOL, $chunk)[0];

if (substr($top, 0, strlen('# group:')) == '# group:') {

$group = trim(str_replace('# group:', '', $top));

} elseif (substr($top, 0, strlen('# subgroup:')) == '# subgroup:') {

$lines = explode(PHP_EOL, $chunk);

unset($lines[0]);

foreach ($lines as $line) {

$subgroup = trim(str_replace('# subgroup:', '', $top));

$linegroup = explode(';', $line);

$parts = explode('#', $linegroup[1]);

$icon = explode(' ', trim($parts[1]), 2);

$emoji[$group][$subgroup][] = [

'group' => trim($group),

'subgroup' => $subgroup,

'name' => trim($linegroup[0]),

'status' => trim($parts[0]),

'emoji' => trim($icon[0]),

'description' => trim($icon[1]),

];

}

}

}

print_r($emoji);

输出如下所示,先嵌套,再嵌套,然后嵌套子组,然后可以轻松地循环并插入到数据库中。

Array

(

[Smileys & People] => Array

(

[face-positive] => Array

(

[0] => Array

(

[group] => Smileys & People

[subgroup] => face-positive

[name] => 1F600

[status] => fully-qualified

[emoji] => ??

[description] => grinning face

)

[1] => Array

(

[group] => Smileys & People

[subgroup] => face-positive

[name] => 1F601

[status] => fully-qualified

[emoji] => ??

[description] => beaming face with smiling eyes

)

[2] => Array

(

[group] => Smileys & People

[subgroup] => face-positive

[name] => 1F602

[status] => fully-qualified

[emoji] => ??

[description] => face with tears of joy

)

...snip

希望能帮助到你。

劳伦斯(Lawrence)非常感谢-如此感谢您。 对此,我真的非常感激。 我也看到您的解决方案也在Github上,好主意:-)

除了劳伦斯的非常有帮助的答案之外,我在这里添加一个答案,以说明如何使用代码访问每个表情符号的6个属性,以便将它们加载到MySQL表中:

...

foreach ($blocks as $chunk) {

$top = explode(PHP_EOL, $chunk)[0];

if (substr($top, 0, strlen('# group:')) == '# group:') {

$group = trim(str_replace('# group:', '', $top));

} elseif (substr($top, 0, strlen('# subgroup:')) == '# subgroup:') {

$lines = explode(PHP_EOL, $chunk);

unset($lines[0]);

foreach ($lines as $line) {

$subgroup = trim(str_replace('# subgroup:', '', $top));

$linegroup = explode(';', $line);

$parts = explode('#', $linegroup[1]);

$icon = explode(' ', trim($parts[1]), 2);

$var_group =        trim($group);

$var_sub_group =    trim($subgroup);

$var_name =         trim($linegroup[0]);

$var_status =       trim($parts[0]);

$var_emoji =        trim($icon[0]);

$var_description =  trim($icon[1]);

/*$emoji[$group][$subgroup][] = [

'group' => trim($group),

'subgroup' => $subgroup,

'name' => trim($linegroup[0]),

'status' => trim($parts[0]),

'emoji' => trim($icon[0]),

'description' => trim($icon[1]),

];*/

$sql ="INSERT INTO xx_emoji (fld_group

, fld_sub_group

, fld_name

, fld_status

, fld_emoji

, fld_description)

VALUES (:var_group

, :var_sub_group

, :var_name

, :var_status

, :var_emoji

, :var_description)";

$stmt = $pdo->prepare($sql);

$stmt->bindParam(':var_group', $var_group);

$stmt->bindParam(':var_sub_group', $var_sub_group);

$stmt->bindParam(':var_name', $var_name);

$stmt->bindParam(':var_status', $var_status);

$stmt->bindParam(':var_emoji', $var_emoji);

$stmt->bindParam(':var_description', $var_description);

$stmt->execute();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值