Come menzionato da altri, PHP 7 introduce direttamente il supporto per la \usintassi Unicode.
Come menzionato anche da altri, l'unico modo per ottenere un valore di stringa da qualsiasi descrizione sensibile dei caratteri Unicode in PHP è convertirlo da qualcos'altro (ad esempio analisi JSON, analisi HTML o qualche altra forma). Ma questo ha un costo in termini di run-time.
Tuttavia, c'è un'altra opzione. Puoi codificare il personaggio direttamente in PHP con \xescape binario. La \xsintassi di escape è supportata anche in PHP 5 .
Ciò è particolarmente utile se si preferisce non inserire il carattere direttamente in una stringa attraverso la sua forma naturale. Ad esempio, se si tratta di un personaggio di controllo invisibile o di altri spazi difficili da rilevare.
Innanzitutto, un esempio di prova:
// Unicode Character 'HAIR SPACE' (U+200A)
$htmlEntityChar = " ";
$realChar = html_entity_decode($htmlEntityChar);
$phpChar = "\xE2\x80\x8A";
echo 'Proof: ';
var_dump($realChar === $phpChar); // bool(true)
Si noti che, come indicato da Pacerier in un'altra risposta, questo codice binario è unico per una codifica di caratteri specifici. Nell'esempio sopra, \xE2\x80\x8Aè la codifica binaria per U + 200A in UTF-8.
La prossima domanda è: come si arriva da U+200Aa \xE2\x80\x8A?
Di seguito è riportato uno script PHP per generare la sequenza di escape per qualsiasi carattere, basato su una stringa JSON, un'entità HTML o qualsiasi altro metodo dopo averlo utilizzato come stringa nativa.
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