Başkaları tarafından belirtildiği gibi, PHP 7, \u
doğrudan Unicode sözdizimi .
Başkaları tarafından da belirtildiği gibi, PHP'deki herhangi bir makul Unicode karakter açıklamasından bir dize değeri elde etmenin tek yolu, bunu başka bir şeyden (örn. JSON ayrıştırma, HTML ayrıştırma veya başka bir form) dönüştürmektir. Ancak bu, çalışma zamanı performans maliyetiyle gelir.
Ancak, başka bir seçenek daha var. \x
İkili kaçış ile karakteri doğrudan PHP'de kodlayabilirsiniz . \x
Kaçış sözdizimi de olan PHP desteklenen 5 .
Bu, karakteri doğal biçimiyle doğrudan bir dizeye girmemeyi tercih ediyorsanız özellikle yararlıdır. Örneğin, görünmez bir kontrol karakteri veya boşlukları tespit etmek zorsa.
İlk olarak, bir kanıt örneği:
// Unicode Character 'HAIR SPACE' (U+200A)
$htmlEntityChar = " ";
$realChar = html_entity_decode($htmlEntityChar);
$phpChar = "\xE2\x80\x8A";
echo 'Proof: ';
var_dump($realChar === $phpChar); // bool(true)
Pacerier tarafından başka bir cevapta belirtildiği gibi, bu ikili kodun belirli bir karakter kodlamasına özgü olduğunu unutmayın. Yukarıdaki örnekte, \xE2\x80\x8A
UTF-8'de U + 200A için ikili kodlama verilmiştir.
Bir sonraki soru, nasıl alırım edilir U+200A
için \xE2\x80\x8A
?
Aşağıda, yerel bir dize olarak bir kez varsa, bir JSON dizesi, HTML varlığı veya başka bir yöntemi temel alan herhangi bir karakter için kaçış dizisi oluşturmak için bir PHP komut dosyası bulunmaktadır.
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