Como mencionado por outros, o PHP 7 apresenta suporte para a \u
sintaxe Unicode diretamente.
Como também mencionado por outros, a única maneira de obter um valor de string a partir de qualquer descrição sensível de caracteres Unicode no PHP, é convertendo-o de outra coisa (por exemplo, análise JSON, análise HTML ou alguma outra forma). Mas isso tem um custo de desempenho em tempo de execução.
No entanto, há uma outra opção. Você pode codificar o caractere diretamente no PHP com \x
escape binário. A \x
sintaxe de escape também é suportada no PHP 5 .
Isso é especialmente útil se você preferir não inserir o caractere diretamente em uma string através de sua forma natural. Por exemplo, se é um caractere de controle invisível ou outro difícil de detectar em branco.
Primeiro, um exemplo de 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)
Observe que, conforme mencionado por Pacerier em outra resposta, esse código binário é exclusivo para uma codificação de caracteres específica. No exemplo acima, \xE2\x80\x8A
é a codificação binária para U + 200A em UTF-8.
A próxima pergunta é: como você vai U+200A
para \xE2\x80\x8A
?
Abaixo está um script PHP para gerar a sequência de escape para qualquer caractere, com base em uma sequência JSON, entidade HTML ou qualquer outro método, uma vez que você a possui como uma sequência 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