Como lo mencionaron otros, PHP 7 introduce soporte para la \u
sintaxis Unicode directamente.
Como también mencionaron otros, la única forma de obtener un valor de cadena a partir de cualquier descripción sensible de caracteres Unicode en PHP, es convirtiéndolo de otra cosa (por ejemplo, análisis JSON, análisis HTML o alguna otra forma). Pero esto tiene un costo de rendimiento en tiempo de ejecución.
Sin embargo, hay otra opción. Puede codificar el carácter directamente en PHP con \x
escape binario. La \x
sintaxis de escape también es compatible con PHP 5 .
Esto es especialmente útil si prefiere no ingresar el carácter directamente en una cadena a través de su forma natural. Por ejemplo, si se trata de un carácter de control invisible u otro espacio en blanco difícil de detectar.
Primero, un ejemplo de prueba:
// Unicode Character 'HAIR SPACE' (U+200A)
$htmlEntityChar = " ";
$realChar = html_entity_decode($htmlEntityChar);
$phpChar = "\xE2\x80\x8A";
echo 'Proof: ';
var_dump($realChar === $phpChar); // bool(true)
Tenga en cuenta que, como mencionó Pacerier en otra respuesta, este código binario es exclusivo de una codificación de caracteres específica. En el ejemplo anterior, \xE2\x80\x8A
es la codificación binaria para U + 200A en UTF-8.
La siguiente pregunta es, ¿cómo llegas de U+200A
a \xE2\x80\x8A
?
A continuación se muestra un script PHP para generar la secuencia de escape para cualquier carácter, basado en una cadena JSON, una entidad HTML o cualquier otro método una vez que lo tiene como una cadena 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