Jak wspominali inni, PHP 7 bezpośrednio wprowadza obsługę \uskładni Unicode.
Jak również wspominali inni, jedynym sposobem na uzyskanie wartości ciągu z dowolnego sensownego opisu znaku Unicode w PHP jest przekonwertowanie go z czegoś innego (np. Parsowanie JSON, parsowanie HTML lub inna forma). Ale wiąże się to z kosztem wydajności w czasie wykonywania.
Jest jednak jeszcze jedna opcja. Możesz kodować znak bezpośrednio w PHP za pomocą \xbinarnych znaków ucieczki. \xSkładnia ucieczka jest również obsługiwana w PHP 5 .
Jest to szczególnie przydatne, jeśli nie chcesz wprowadzać znaku bezpośrednio w ciągu w jego naturalnej formie. Na przykład, jeśli jest to niewidoczny znak sterujący lub inny trudny do wykrycia biały znak.
Najpierw przykład dowodu:
// Unicode Character 'HAIR SPACE' (U+200A)
$htmlEntityChar = " ";
$realChar = html_entity_decode($htmlEntityChar);
$phpChar = "\xE2\x80\x8A";
echo 'Proof: ';
var_dump($realChar === $phpChar); // bool(true)
Zauważ, że jak wspomniał Pacerier w innej odpowiedzi, ten kod binarny jest unikalny dla określonego kodowania znaków. W powyższym przykładzie \xE2\x80\x8Ajest kodowanie binarne dla U + 200A w UTF-8.
Następne pytanie brzmi: jak dostać się z U+200Ado \xE2\x80\x8A?
Poniżej znajduje się skrypt PHP do generowania sekwencji ucieczki dla dowolnego znaku na podstawie ciągu JSON, encji HTML lub dowolnej innej metody, gdy masz ją jako natywny ciąg.
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