Seperti yang disebutkan oleh yang lain, PHP 7 memperkenalkan dukungan untuk \u
sintaks Unicode secara langsung.
Seperti yang juga disebutkan oleh orang lain, satu-satunya cara untuk mendapatkan nilai string dari deskripsi karakter Unicode yang masuk akal di PHP, adalah dengan mengonversinya dari sesuatu yang lain (mis. Parsing JSON, parsing HTML atau bentuk lain). Tetapi ini datang dengan biaya kinerja run-time.
Namun, ada satu opsi lain. Anda dapat menyandikan karakter secara langsung di PHP dengan \x
binary escaping. The \x
sintaks melarikan diri juga didukung dalam PHP 5 .
Ini sangat berguna jika Anda memilih untuk tidak memasukkan karakter secara langsung dalam string melalui bentuk aslinya. Misalnya, jika itu adalah karakter kontrol yang tidak terlihat, atau sulit lainnya untuk mendeteksi spasi putih.
Pertama, contoh bukti:
// Unicode Character 'HAIR SPACE' (U+200A)
$htmlEntityChar = " ";
$realChar = html_entity_decode($htmlEntityChar);
$phpChar = "\xE2\x80\x8A";
echo 'Proof: ';
var_dump($realChar === $phpChar); // bool(true)
Perhatikan bahwa, seperti yang disebutkan oleh Pacerier dalam jawaban lain, kode biner ini unik untuk pengkodean karakter tertentu. Dalam contoh di atas, \xE2\x80\x8A
adalah pengkodean biner untuk U + 200A di UTF-8.
Pertanyaan berikutnya adalah, bagaimana Anda dapatkan dari U+200A
ke \xE2\x80\x8A
?
Di bawah ini adalah skrip PHP untuk menghasilkan urutan escape untuk setiap karakter, berdasarkan pada string JSON, entitas HTML, atau metode lain setelah Anda memilikinya sebagai string asli.
function str_encode_utf8binary($str) {
/** @author Krinkle 2018 */
$output = '';
foreach (str_split($str) as $octet) {
$ordInt = ord($octet);
// Convert from int (base 10) to hex (base 16), for PHP \x syntax
$ordHex = base_convert($ordInt, 10, 16);
$output .= '\x' . $ordHex;
}
return $output;
}
function str_convert_html_to_utf8binary($str) {
return str_encode_utf8binary(html_entity_decode($str));
}
function str_convert_json_to_utf8binary($str) {
return str_encode_utf8binary(json_decode($str));
}
// Example for raw string: Unicode Character 'INFINITY' (U+221E)
echo str_encode_utf8binary('∞') . "\n";
// \xe2\x88\x9e
// Example for HTML: Unicode Character 'HAIR SPACE' (U+200A)
echo str_convert_html_to_utf8binary(' ') . "\n";
// \xe2\x80\x8a
// Example for JSON: Unicode Character 'HAIR SPACE' (U+200A)
echo str_convert_json_to_utf8binary('"\u200a"') . "\n";
// \xe2\x80\x8a