Mech
Mech

Reputation: 79

Display \u1F603 (emoji icon) in web page

I store codes like "\u1F603" within messages in my database, and now I need to display the corresponding emoji on my web page.

How can I convert \u1F603 to \xF0\x9F\x98\x83 using PHP for displaying emoji icons in a web page?

Upvotes: 0

Views: 9143

Answers (2)

Mech
Mech

Reputation: 79

Hell everyone, after many try i can found solution.

I user below code: https://github.com/BriquzStudio/php-emoji

include 'Emoji.php';
$message = Emoji::Decode($message);

This one working fine for me!! :)Below is my reslut

Upvotes: 1

trincot
trincot

Reputation: 350760

You don't need to convert emoji character codes to UTF-8 sequences, you can simply use the original 21-bit Unicode value as numeric character reference in HTML like this: 😃 which renders as: 😃.

The Wikipedia article "Unicode and HTML" explains:

In order to work around the limitations of legacy encodings, HTML is designed such that it is possible to represent characters from the whole of Unicode inside an HTML document by using a numeric character reference: a sequence of characters that explicitly spell out the Unicode code point of the character being represented. A character reference takes the form &#N;, where N is either a decimal number for the Unicode code point, or a hexadecimal number, in which case it must be prefixed by x. The characters that compose the numeric character reference are universally representable in every encoding approved for use on the Internet.

For example, a Unicode code point like U+5408, which corresponds to a particular Chinese character, has to be converted to a decimal number, preceded by &# and followed by ;, like this: 合, which produces this: 合.

So if in your PHP code you have a string containing '\u1F603', then you can create the corresponding HTML string using preg_replace, as in following example:

$text = "This is fun \\u1F603!"; // this has just one backslash, it had to be escaped 
echo "Database has: $text<br>";
$html = preg_replace("/\\\\u([0-9A-F]{2,5})/i", "&#x$1;", $text);
echo "Browser shows: $html<br>";

This outputs:

Database has: This is fun \u1F603!
Browser shows: This is fun 😃!

Note that if in your data you would use the literal \u notation also for lower range Unicode characters, i.e. with hex numbers of 2 to 4 digits, you must make sure the next user's character is not also a hex digit, as it would lead to a wrong interpretation of where the \u escape sequence stops. In that case I would suggest to always left-pad these hex numbers with zeroes in your data so they are always 5 digits long.

To ensure your browser uses the correct character encoding, do the following:

  1. Specify the UTF-8 character encoding in the HTML head section:
    <meta charset="utf-8">
  2. Save your PHP file in UTF-8 encoding. Depending on your editor, you may need to use a "Save As" option, or find such a setting in the editor's "Preferences" or "Options" menu.

Upvotes: 3

Related Questions