EmojiConfig.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2020 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace emoji;
  12. class EmojiConfig
  13. {
  14. protected static $emojiList =[
  15. [0x1f600],
  16. [0x1f601],
  17. [0x1f602],
  18. [0x1f603],
  19. [0x1f604],
  20. [0x1f605],
  21. [0x1f606],
  22. [0x1f607],
  23. [0x1f608],
  24. [0x1f60a],
  25. [0x1f60b],
  26. [0x1f60c],
  27. [0x1f60d],
  28. [0x1f60e],
  29. [0x1f60f],
  30. [0x1f610],
  31. [0x1f611],
  32. [0x1f612],
  33. [0x1f613],
  34. [0x1f614],
  35. [0x1f615],
  36. [0x1f616],
  37. [0x1f617],
  38. [0x1f618],
  39. [0x1f619],
  40. [0x1f619],
  41. [0x1f61a],
  42. [0x1f61b],
  43. [0x1f61c],
  44. [0x1f61d],
  45. [0x1f61e],
  46. [0x1f61f],
  47. [0x1f620],
  48. [0x1f621],
  49. [0x1f622],
  50. [0x1f623],
  51. [0x1f624],
  52. [0x1f625],
  53. [0x1f626],
  54. [0x1f627],
  55. [0x1f628],
  56. [0x1f629],
  57. [0x1f62a],
  58. [0x1f62b],
  59. [0x1f62c],
  60. [0x1f62d],
  61. [0x1f62e],
  62. [0x1f62f],
  63. [0x1f630],
  64. [0x1f631],
  65. [0x1f632],
  66. [0x1f633],
  67. [0x1f634],
  68. [0x1f635],
  69. [0x1f636],
  70. [0x1f637],
  71. [0x1f638],
  72. [0x1f639],
  73. [0x1f63a],
  74. [0x1f63b],
  75. [0x1f63c],
  76. [0x1f63d],
  77. [0x1f63e],
  78. [0x1f63f],
  79. [0x1f640],
  80. [0x1f641],
  81. [0x1f642],
  82. [0x1f643],
  83. [0x1f644],
  84. [0x1f645],
  85. [0x1f646],
  86. [0x1f647],
  87. [0x1f648],
  88. [0x1f649],
  89. [0x1f64a],
  90. [0x1f64b],
  91. [0x1f64c],
  92. [0x1f64d],
  93. [0x1f64e],
  94. [0x1f64f],
  95. [0x1f680],
  96. [0x1f681],
  97. [0x1f682],
  98. [0x1f683],
  99. [0x1f684],
  100. [0x1f685],
  101. [0x1f686],
  102. [0x1f687],
  103. [0x1f688],
  104. [0x1f689],
  105. [0x1f68a],
  106. [0x1f68b],
  107. [0x1f68c],
  108. [0x1f68d],
  109. [0x1f68e],
  110. [0x1f68f],
  111. [0x1f690],
  112. [0x1f691],
  113. [0x1f692],
  114. [0x1f693],
  115. [0x1f694],
  116. [0x1f695],
  117. [0x1f696],
  118. [0x1f697],
  119. [0x1f698],
  120. [0x1f699],
  121. [0x1f69a],
  122. [0x1f69b],
  123. [0x1f69c],
  124. [0x1f69d],
  125. [0x1f69e],
  126. [0x1f69f],
  127. ];
  128. public static function getEmjiHtmlList($slicing = 20)
  129. {
  130. require_once(ROOT_PATH.'extend/emoji/Emoji.php');
  131. $list = [];
  132. foreach (self::$emojiList as $unified){
  133. $bytes='';
  134. foreach ($unified as $cp){
  135. $bytes .= self::utf8_bytes($cp);
  136. }
  137. $data = [
  138. 'html'=>emoji_unified_to_html($bytes),
  139. 'unified'=>emoji_html_to_unified(emoji_unified_to_html($bytes))
  140. ];
  141. $list[] = $data;
  142. unset($data);
  143. }
  144. return array_chunk($list,$slicing,true);
  145. }
  146. public static function utf8_bytes($cp){
  147. if ($cp > 0x10000){
  148. # 4 bytes
  149. return chr(0xF0 | (($cp & 0x1C0000) >> 18)).
  150. chr(0x80 | (($cp & 0x3F000) >> 12)).
  151. chr(0x80 | (($cp & 0xFC0) >> 6)).
  152. chr(0x80 | ($cp & 0x3F));
  153. }else if ($cp > 0x800){
  154. # 3 bytes
  155. return chr(0xE0 | (($cp & 0xF000) >> 12)).
  156. chr(0x80 | (($cp & 0xFC0) >> 6)).
  157. chr(0x80 | ($cp & 0x3F));
  158. }else if ($cp > 0x80){
  159. # 2 bytes
  160. return chr(0xC0 | (($cp & 0x7C0) >> 6)).
  161. chr(0x80 | ($cp & 0x3F));
  162. }else{
  163. # 1 byte
  164. return chr($cp);
  165. }
  166. }
  167. }