Here is a PHP snippet that can make your (and future-me's) life easier. In PHP, there are several methods for converting Unicode strings to UTF-8. One popular approach is to use PHP built-in functions like mbstring
or iconv
. In this article, we'll explore two methods for converting Unicode strings to UTF-8 in PHP:
- using the
json_decode
function, and - using the Unicode escape syntax.
With this, let's dive into code:
Method 1: Decode using the json_decode
#
The json_decode
function can automatically convert Unicode strings in PHP:
$text = 'Elon \u2018Technoking\u2019 Musk';
echo json_decode('"' . $text . '"'); // prints "Elon 'Technoking' Musk"
You can also create a helper function for this:
function unicode_decode(string $text): string {
return json_decode('"' . $text . '"');
}
$text = 'Elon \u2018Technoking\u2019 Musk';
echo unicode_decode($text); // prints "Elon 'Technoking' Musk"
For more information, please refer to this Stackoverflow post.
Method 2: Decoding using Unicode Encoding in PHP 7+ #
Since PHP 7.0, you can use a Unicode escape syntax to represent code points:
echo "\u{9999}"; // represents a unicode char.
If you have a string that contains \u9999, you can use a regular expression to add the required brackets:
// The string with Unicode
$text = 'Elon \u2018Technoking\u2019 Musk';
// The regular expression to match Unicode code point escapes
$regex = '/\\\\u([0-9a-fA-F]{4})/';
// Replace the Unicode code point escapes with their corresponding UTF-8 characters
$decoded = preg_replace_callback($regex, function ($match) {
// Convert the HTML entity (`&#xXXXX;`) to its UTF-8 character equivalent.
return mb_convert_encoding('' . $match[1] . ';', 'UTF-8', 'HTML-ENTITIES');
}, $text);
echo $decoded; // Outputs "Elon ‘Technoking’ Musk"
For more information, please refer to the PHP documentation.
Again, you can create a helper function as shown above. If you are wondering about whether to use a Snippet such as this or not, you might find my considerations on the VanillaPHP vs. using packages of interest.
🙏🙏🙏
Since you've made it this far, sharing this article on your favorite social media network would be highly appreciated 💖! For feedback, please ping me on Twitter.
Published