Aktueller Standort: Startseite> Neueste Artikel> Wie benutze ich die Funktion chr (), um eine Zeichenfolge mit Sonderzeichen zu generieren?

Wie benutze ich die Funktion chr (), um eine Zeichenfolge mit Sonderzeichen zu generieren?

gitbox 2025-09-23

In PHP ist CHR () eine sehr grundlegende, aber häufig verwendete Funktion: Es dauert eine Ganzzahl (0–255) und gibt das entsprechende Einzel-Byte-Zeichen zurück. Zum Beispiel gibt CHR (65) "a" zurück. Im Umgang mit "Sonderzeichen"-wie Kontrollzeichen, binären Byte-Sequenzen oder Multi-Byte-Zeichen (UTF-8) (wie Chinesen, Emoticons) ist es jedoch notwendig, die Grenzen von CHR () zu verstehen und mit anderen Methoden zusammenzuarbeiten, um die gewünschte Zeichenfolge zu erzeugen.

Das Folgende sind einige Szenarien, um allgemeine Praktiken und Vorsichtsmaßnahmen zu veranschaulichen, und es gibt Beispiele, die kopiert und direkt ausgeführt werden können.


1) Erzeugen Sie ASCII/Kontrollzeichen (einzelnes Byte)

Was CHR () am besten zum Generieren von Single-Byte-Zeichen erzeugt: Es kann verwendet werden, um Neulinien, Registerkarten, unsichtbare Steuerzeichen oder Byte-Werte von 0–255 zu generieren.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// Hauptstadt A</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-number">65</span></span><span>); </span><span><span class="hljs-comment">// Ausgabe A</span></span><span>

</span><span><span class="hljs-comment">// Zeilenpause(LF)</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"line1"</span></span><span> . </span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-number">10</span></span><span>) . </span><span><span class="hljs-string">"line2"</span></span><span>;

</span><span><span class="hljs-comment">// Tab -Symbole(TAB)</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"col1"</span></span><span> . </span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-number">9</span></span><span>) . </span><span><span class="hljs-string">"col2"</span></span><span>;

</span><span><span class="hljs-comment">// Generieren Sie Binärdatenfragmente</span></span><span>
</span><span><span class="hljs-variable">$bytes</span></span><span> = </span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-number">0x00</span></span><span>) . </span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-number">0xFF</span></span><span>) . </span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-number">0x7A</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-variable">$bytes</span></span><span>); </span><span><span class="hljs-comment">// string(3) "\x00\xFFz"</span></span><span>
</span></span>

TIPP : Wenn Sie mit binären Protokollen, Dateikopfzeilen oder Netzwerkpaketen umgehen, ist CHR () sehr bequem, um Bytes zu konstruieren.


2) Generieren Sie mehrere Bytes gleichzeitig: Verwenden Sie Pack () oder Spleißen chr ().

Wenn Sie mehrere aufeinanderfolgende Bytes gleichzeitig konstruieren möchten, ist Pack () einfacher und hat eine bessere Leistung als eine große Anzahl von Spleißen -CHR () .

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// verwenden pack Erzeugen drei Bytes:0x01 0x02 0x03</span></span><span>
</span><span><span class="hljs-variable">$bin</span></span><span> = </span><span><span class="hljs-title function_ invoke__">pack</span></span><span>(</span><span><span class="hljs-string">'C*'</span></span><span>, </span><span><span class="hljs-number">0x01</span></span><span>, </span><span><span class="hljs-number">0x02</span></span><span>, </span><span><span class="hljs-number">0x03</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">bin2hex</span></span><span>(</span><span><span class="hljs-variable">$bin</span></span><span>); </span><span><span class="hljs-comment">// Ausgabe "010203"</span></span><span>

</span><span><span class="hljs-comment">// Spleißen chr Weg(Gleichwertigkeit)</span></span><span>
</span><span><span class="hljs-variable">$bin2</span></span><span> = </span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>) . </span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-number">2</span></span><span>) . </span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-number">3</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">bin2hex</span></span><span>(</span><span><span class="hljs-variable">$bin2</span></span><span>); </span><span><span class="hljs-comment">// "010203"</span></span><span>
</span></span>

3) UTF-8-Multi-Byte-Zeichen erzeugen (Chinesen, Emoticons usw.)

CHR () gibt nur einzelne Bytes zurück. UTF-8-Multibyte-Zeichen (Codepunkt> 0xff) können nicht direkt von chr () generiert werden. Gemeinsame Alternativen umfassen:

Methode A - Verwenden Sie mb_convert_encoding () / html_entity_decode () (basierend auf der HTML -Entität)

Für bekannte Unicode-Codepunkte (wie U+1F600-Emoticons) können Sie sie über HTML-Entitäten in UTF-8 konvertieren:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 使verwenden HTML Entitätserzeugung Emoticons(Zum Beispiel ?? U+1F600)</span></span><span>
</span><span><span class="hljs-variable">$emoji</span></span><span> = </span><span><span class="hljs-title function_ invoke__">html_entity_decode</span></span><span>(</span><span><span class="hljs-string">'&amp;#x1F600;'</span></span><span>, ENT_NOQUOTES, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$emoji</span></span><span> . PHP_EOL;
</span></span>

Methode B - Verwenden Sie Intlchar :: chr () (wenn die INTL -Erweiterung installiert ist)

Wenn der Server ext-intl aktiviert ist, können Sie direkt den Unicode-Codepunkt drücken, um Zeichen zu generieren:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// brauchen ext-intl</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title class_">IntlChar</span></span><span>::</span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-number">0x4E2D</span></span><span>); </span><span><span class="hljs-comment">// Ausgabe "Mitte"</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title class_">IntlChar</span></span><span>::</span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-number">0x1F600</span></span><span>); </span><span><span class="hljs-comment">// Ausgabe ??(Ausdruck)</span></span><span>
</span></span>

Methode C - Binär Bytes (HEX) - HEX2BIN () verwenden, um eine spezifische UTF -8 -Byte -Sequenz zu erzeugen

Wenn eine UTF-8-hexadezimale Byte-Sequenz bekannter Zeichen, kann die Byte-Zeichenfolge direkt konstruiert werden:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// "Mitte" von UTF-8 Die Codierung ist E4 B8 AD</span></span><span>
</span><span><span class="hljs-variable">$zh</span></span><span> = </span><span><span class="hljs-title function_ invoke__">hex2bin</span></span><span>(</span><span><span class="hljs-string">'e4b8ad'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$zh</span></span><span>; </span><span><span class="hljs-comment">// Ausgabe Mitte</span></span><span>

</span><span><span class="hljs-comment">// Ausdruck ?? von UTF-8 Die Codierung ist F0 9F 98 80</span></span><span>
</span><span><span class="hljs-variable">$emoji</span></span><span> = </span><span><span class="hljs-title function_ invoke__">hex2bin</span></span><span>(</span><span><span class="hljs-string">'f09f9880'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$emoji</span></span><span>; </span><span><span class="hljs-comment">// Ausgabe ??</span></span><span>
</span></span>

Hinweis : Hier schreibt Hex2Bin () den Byte-Wert von UTF-8 direkt aus, der für Fälle geeignet ist, in denen Sie Byte-Sequenzen kennen (z. B. aus Spezifikationen oder Netzwerkpaketaufnahmen).


4) Allgemeine Methode zum Umgang mit Unicode-Codepunkten auf UTF-8

Wenn Sie einen Ganzzahlpunkt haben, benötigen Sie eine allgemeine Funktion, um sie in UTF-8-Zeichen umzuwandeln (ohne sich auf zusätzliche Erweiterungen zu verlassen), können Sie selbst eine einfache Conversion implementieren (Folgendes ist die Beispielimplementierung):

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">codepoint_to_utf8</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-keyword">int</span></span></span><span> </span><span><span class="hljs-variable">$cp</span></span><span>): </span><span><span class="hljs-title">string</span></span><span> {
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$cp</span></span><span> &lt;= </span><span><span class="hljs-number">0x7F</span></span><span>) {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-variable">$cp</span></span><span>);
    } </span><span><span class="hljs-keyword">elseif</span></span><span> (</span><span><span class="hljs-variable">$cp</span></span><span> &lt;= </span><span><span class="hljs-number">0x7FF</span></span><span>) {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-number">0xC0</span></span><span> | (</span><span><span class="hljs-variable">$cp</span></span><span> &gt;&gt; </span><span><span class="hljs-number">6</span></span><span>)) .
               </span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-number">0x80</span></span><span> | (</span><span><span class="hljs-variable">$cp</span></span><span> &amp; </span><span><span class="hljs-number">0x3F</span></span><span>));
    } </span><span><span class="hljs-keyword">elseif</span></span><span> (</span><span><span class="hljs-variable">$cp</span></span><span> &lt;= </span><span><span class="hljs-number">0xFFFF</span></span><span>) {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-number">0xE0</span></span><span> | (</span><span><span class="hljs-variable">$cp</span></span><span> &gt;&gt; </span><span><span class="hljs-number">12</span></span><span>)) .
               </span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-number">0x80</span></span><span> | ((</span><span><span class="hljs-variable">$cp</span></span><span> &gt;&gt; </span><span><span class="hljs-number">6</span></span><span>) &amp; </span><span><span class="hljs-number">0x3F</span></span><span>)) .
               </span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-number">0x80</span></span><span> | (</span><span><span class="hljs-variable">$cp</span></span><span> &amp; </span><span><span class="hljs-number">0x3F</span></span><span>));
    } </span><span><span class="hljs-keyword">elseif</span></span><span> (</span><span><span class="hljs-variable">$cp</span></span><span> &lt;= </span><span><span class="hljs-number">0x10FFFF</span></span><span>) {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-number">0xF0</span></span><span> | (</span><span><span class="hljs-variable">$cp</span></span><span> &gt;&gt; </span><span><span class="hljs-number">18</span></span><span>)) .
               </span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-number">0x80</span></span><span> | ((</span><span><span class="hljs-variable">$cp</span></span><span> &gt;&gt; </span><span><span class="hljs-number">12</span></span><span>) &amp; </span><span><span class="hljs-number">0x3F</span></span><span>)) .
               </span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-number">0x80</span></span><span> | ((</span><span><span class="hljs-variable">$cp</span></span><span> &gt;&gt; </span><span><span class="hljs-number">6</span></span><span>) &amp; </span><span><span class="hljs-number">0x3F</span></span><span>)) .
               </span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-number">0x80</span></span><span> | (</span><span><span class="hljs-variable">$cp</span></span><span> &amp; </span><span><span class="hljs-number">0x3F</span></span><span>));
    }
    </span><span><span class="hljs-keyword">throw</span></span><span> </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-built_in">InvalidArgumentException</span></span><span>(</span><span><span class="hljs-string">'Invalid Unicode code point'</span></span><span>);
}

</span><span><span class="hljs-comment">// 使verwenden</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">codepoint_to_utf8</span></span><span>(</span><span><span class="hljs-number">0x4E2D</span></span><span>);   </span><span><span class="hljs-comment">// Mitte</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">codepoint_to_utf8</span></span><span>(</span><span><span class="hljs-number">0x1F600</span></span><span>); </span><span><span class="hljs-comment">// ??</span></span><span>
</span></span>

Diese Funktion verwendet CHR () immer noch, um jedes UTF-8-Byte zu konstruieren, was eine allgemeine Lösung für reines PHP ist.


5) Häufige Fallstricke und Vorschläge

  • Parameterbereich von CHR () : Nur für ein Byte (0–255) anwendbar. Durch die Übergabe von Werten von mehr als 255 wird eine Kürzung verursacht (die unteren 8 Bits einnehmen), was normalerweise nicht das gewünschte Verhalten ist.

  • Codierungsumgebung : Wenn Sie Multibyte-Zeichen verarbeiten, stellen Sie sicher, dass die Zeichenfolge als UTF-8 codiert ist und dass verwandte Funktionen (z. B. JSON_Encode , Strlen ) die MB_* -Serie verwenden oder die richtige Codierung angeben.

  • Anzeige und Übertragung : Einige Umgebungen (Terminals, HTTP -Header, Datenbankspalten) sind für Codierung empfindlich. Denken Sie nach dem Erstellen von UTF-8-Zeichen daran, die richtige Codierung bei Ausgabe oder Speicher zu deklarieren (z. B. fügen Sie <meta charset = "utf-8"> zur HTML-Seite oder der Inhaltstyp hinzu: text/html; charset = utf-8 ).

  • Bevorzugte Tools : Wenn Sie sich nur mit Unicode -Codepunkten befassen müssen, verwenden Sie Intlchar :: chr () (falls verfügbar) oder MB_* / Conversion -Funktionen, da sie Semantik sind und weniger Fehler haben.


6) Schnelle Referenztabelle (prüfen)

 <span><span><span class="hljs-comment">// Einzelner Byte -Charakter</span></span><span>
</span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-number">65</span></span><span>); </span><span><span class="hljs-comment">// "A"</span></span><span>
</span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-number">10</span></span><span>); </span><span><span class="hljs-comment">// LF Zeilenpause</span></span><span>

</span><span><span class="hljs-comment">// Multi-byte / Unicode Alternative</span></span><span>
</span><span><span class="hljs-title function_ invoke__">html_entity_decode</span></span><span>(</span><span><span class="hljs-string">'&amp;#x1F600;'</span></span><span>, ENT_NOQUOTES, </span><span><span class="hljs-string">'UTF-8'</span></span><span>); </span><span><span class="hljs-comment">// ??</span></span><span>
</span><span><span class="hljs-title class_">IntlChar</span></span><span>::</span><span><span class="hljs-title function_ invoke__">chr</span></span><span>(</span><span><span class="hljs-number">0x4E2D</span></span><span>); </span><span><span class="hljs-comment">// "Mitte"(brauchen ext-intl)</span></span><span>
</span><span><span class="hljs-title function_ invoke__">hex2bin</span></span><span>(</span><span><span class="hljs-string">'e4b8ad'</span></span><span>); </span><span><span class="hljs-comment">// "Mitte"(直接verwenden UTF-8 Hexadezimal -Bytes)</span></span><span>

</span><span><span class="hljs-comment">// Codepunkte auf konvertieren auf UTF-8(见上面von codepoint_to_utf8)</span></span><span>
</span></span>

Zusammenfassen

CHR () ist sehr einfach und direkt, wenn sie Single-Byte-Zeichen (0–255) und binäre Daten generieren; Bei Multi-Byte-Unicode-Zeichen (Chinesisch, Emoji) müssen jedoch zuverlässige Ergebnisse mit Intlchar :: CHR () , HTML Entity Conversion, Hex2Bin () oder benutzerdefinierten Codepunkt-zu-UTF-8-Konvertierungsfunktionen erzielt werden. Die Auswahl der entsprechenden Methode gemäß Ihrem spezifischen Szenario (Netzwerkprotokoll, Dateiverarbeitung, Webseitenausgabe) und der Beachtung der Codierungskonsistenz können verschiedene "Sonderzeichen" stabil generieren.