Wie von anderen erwähnt, führt PHP 7 die \u
direkte Unterstützung der Unicode-Syntax ein.
Wie auch von anderen erwähnt, besteht die einzige Möglichkeit, einen Zeichenfolgenwert aus einer sinnvollen Unicode-Zeichenbeschreibung in PHP zu erhalten, darin, ihn von etwas anderem zu konvertieren (z. B. JSON-Analyse, HTML-Analyse oder einer anderen Form). Dies ist jedoch mit Leistungskosten zur Laufzeit verbunden.
Es gibt jedoch noch eine andere Option. Sie können das Zeichen direkt in PHP mit \x
binärem Escapezeichen codieren . Die \x
Escape-Syntax wird auch in PHP 5 unterstützt .
Dies ist besonders nützlich, wenn Sie das Zeichen aufgrund seiner natürlichen Form nicht direkt in eine Zeichenfolge eingeben möchten. Zum Beispiel, wenn es sich um ein unsichtbares Steuerzeichen oder ein anderes schwer zu erkennendes Leerzeichen handelt.
Zunächst ein Beweisbeispiel:
// Unicode Character 'HAIR SPACE' (U+200A)
$htmlEntityChar = " ";
$realChar = html_entity_decode($htmlEntityChar);
$phpChar = "\xE2\x80\x8A";
echo 'Proof: ';
var_dump($realChar === $phpChar); // bool(true)
Beachten Sie, dass dieser Binärcode, wie von Pacerier in einer anderen Antwort erwähnt, für eine bestimmte Zeichenkodierung eindeutig ist. Im obigen Beispiel \xE2\x80\x8A
ist die Binärcodierung für U + 200A in UTF-8.
Die nächste Frage ist, wie kommst du von U+200A
zu \xE2\x80\x8A
?
Unten finden Sie ein PHP-Skript zum Generieren der Escape-Sequenz für ein beliebiges Zeichen, basierend auf einer JSON-Zeichenfolge, einer HTML-Entität oder einer anderen Methode, sobald Sie diese als native Zeichenfolge haben.
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