Як зазначають інші, PHP 7 вводить підтримку \u
синтаксису Unicode безпосередньо.
Як також зазначають інші, єдиний спосіб отримати значення рядка з будь-якого чуйного опису символів Unicode в PHP - це перетворення його з чогось іншого (наприклад, JSON-синтаксичний аналіз, HTML-аналіз чи інша форма). Але це відбувається за рахунок експлуатаційних витрат.
Однак є ще один варіант. Ви можете кодувати символу безпосередньо в PHP, використовуючи \x
бінарне сканування. \x
Синтаксис втечу також підтримується в PHP 5 .
Це особливо корисно, якщо ви волієте не вводити персонаж прямо в рядку через його природну форму. Наприклад, якщо це невидимий контрольний символ або інший важко виявити пробіл.
По-перше, доказний приклад:
// Unicode Character 'HAIR SPACE' (U+200A)
$htmlEntityChar = " ";
$realChar = html_entity_decode($htmlEntityChar);
$phpChar = "\xE2\x80\x8A";
echo 'Proof: ';
var_dump($realChar === $phpChar); // bool(true)
Зауважте, що, як згадує Пак’єр в іншій відповіді, цей двійковий код унікальний для конкретного кодування символів. У наведеному вище прикладі \xE2\x80\x8A
є двійкове кодування для U + 200A в UTF-8.
Наступне питання, як ви отримаєте від U+200A
до \xE2\x80\x8A
?
Нижче наведено скрипт PHP для створення послідовності запуску для будь-якого символу, заснованого на рядку JSON, HTML-суті або будь-якому іншому методі, як тільки ви матимете його як рідну рядок.
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