Comme mentionné par d'autres, PHP 7 introduit \u
directement le support de la syntaxe Unicode.
Comme d'autres l'ont également mentionné, la seule façon d'obtenir une valeur de chaîne à partir de toute description de caractère Unicode sensée en PHP, est de la convertir à partir de quelque chose d'autre (par exemple l'analyse JSON, l'analyse HTML ou une autre forme). Mais cela a un coût d'exécution.
Cependant, il existe une autre option. Vous pouvez encoder le caractère directement en PHP avec \x
échappement binaire. La \x
syntaxe d'échappement est également prise en charge dans PHP 5 .
Ceci est particulièrement utile si vous préférez ne pas saisir le caractère directement dans une chaîne sous sa forme naturelle. Par exemple, s'il s'agit d'un caractère de contrôle invisible ou d'un autre espace difficile à détecter.
Tout d'abord, un exemple de preuve:
// Unicode Character 'HAIR SPACE' (U+200A)
$htmlEntityChar = " ";
$realChar = html_entity_decode($htmlEntityChar);
$phpChar = "\xE2\x80\x8A";
echo 'Proof: ';
var_dump($realChar === $phpChar); // bool(true)
Notez que, comme mentionné par Pacerier dans une autre réponse, ce code binaire est unique à un codage de caractères spécifique. Dans l'exemple ci-dessus,\xE2\x80\x8A
est le codage binaire pour U + 200A en UTF-8.
La question suivante est de savoir comment passer de U+200A
à\xE2\x80\x8A
?
Vous trouverez ci-dessous un script PHP pour générer la séquence d'échappement pour n'importe quel caractère, basée sur une chaîne JSON, une entité HTML ou toute autre méthode une fois que vous l'avez en tant que chaîne native.
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