In PHP ist die String -Verarbeitung eine sehr häufige Voraussetzung für die Entwicklung. Manchmal müssen wir Schichten wie unsichtbare Newlines, Registerkartenzeichen usw. identifizieren und prozessieren. PHP liefert die Funktion cType_cntrl , mit der festgestellt werden kann, ob ein Zeichen zu einem Steuerzeichen gehört.
In diesem Artikel wird vorgestellt, wie die Funktion cType_cntrl verwendet wird, um Kontrollzeichen in Zeichenfolgen zu finden und mehrere effektive Ersatzmethoden zu erläutern, um diese Sonderzeichen besser umzugehen.
Die Kontrollzeichen sind nicht gedruckte Zeichen mit den Codierungsbereichen von 0 bis 31 und 127. Zu den allgemeinen gehören Zeilenumbrüche \ n (ASCII 10), Wagenrückgabe \ r (ASCII 13), TAB-Zeichen \ t (ASCII 9) usw. Sie werden normalerweise nicht im Text angezeigt, sondern können sich auf die Verarbeitung und Anzeige von Strings auswirken.
CTYPE_CNTRL wird verwendet, um zu überprüfen, ob jedes Zeichen in der Zeichenfolge ein Steuerzeichen ist. Seine Verwendung ist:
bool ctype_cntrl ( string $text )
Geben Sie True zurück, wenn alle Zeichen in der Zeichenfolge Kontrollzeichen sind, ansonsten falsch .
Es ist zu beachten, dass diese Funktion ein ganzes Urteil für jedes Zeichen in der Zeichenfolge ist. Wenn die Zeichenfolge nicht kontrollierende Zeichen enthält, ist das Ergebnis falsch .
Um zu überprüfen, ob in der Zeichenfolge Kontrollzeichen vorhanden sind, ist eine Zeichen-für-Charakter-Erkennung erforderlich.
Durch jedes Zeichen in der Zeichenfolge iterieren, verwenden Sie CTYPE_CNTRL , um es zu beurteilen, und ersetzen Sie es, nachdem Sie die Steuerzeichen entdeckt haben.
Beispielcode:
<?php
function replaceControlChars($str, $replacement = '') {
$result = '';
$length = strlen($str);
for ($i = 0; $i < $length; $i++) {
$char = $str[$i];
if (ctype_cntrl($char)) {
$result .= $replacement; // Ersetzen Sie durch bestimmte Zeichen,Standardmäßig löschen
} else {
$result .= $char;
}
}
return $result;
}
$input = "Hello\nWorld\t!";
$output = replaceControlChars($input, ' ');
echo $output; // Ausgabe:Hello World !
?>
Der ASCII-Bereich, der den Steuerzeichen entspricht, ist [\ x00- \ x1f \ x7f] , der durch reguläre Übereinstimmung ersetzt werden kann.
Beispiel:
<?php
$input = "Line1\r\nLine2\tEnd";
$output = preg_replace('/[\x00-\x1F\x7F]/', '', $input);
echo $output; // Ausgabe:Line1Line2End
?>
Dieser Ansatz ist in der Regel effizienter und für den Stapelersatz geeignet.
Wenn Sie überprüfen müssen, ob die Zeichenfolge zuerst Steuerzeichen enthält, und dann zu entscheiden, ob sie ersetzt werden, können Sie zuerst Loop und CTYPE_CNTRL verwenden, um zu beurteilen, und dann regelmäßig ersetzt werden:
<?php
function hasControlChars($str) {
$length = strlen($str);
for ($i = 0; $i < $length; $i++) {
if (ctype_cntrl($str[$i])) {
return true;
}
}
return false;
}
$input = "Test\nString";
if (hasControlChars($input)) {
$cleaned = preg_replace('/[\x00-\x1F\x7F]/', '', $input);
echo $cleaned;
} else {
echo $input;
}
?>
CTYPE_CNTRL ist geeignet, um festzustellen, ob ein einzelnes Zeichen ein Kontrollzeichen ist.
Bei der Suche nach der Suche nach der Zeichenfolge müssen Kontrollzeichen enthält, es ist erforderlich, die Erkennung von Zeichen für Charakter zu schleifen.
Beim Ersetzen von Steuerzeichen ist die Verwendung regulärer Ausdrücke, um den Kontrollcharakterbereichen übereinzustimmen, prägnanter und effizienter.
Die Kombination der beiden kann die Logik des ersten Urteils und dann die Ersatz erkennen.
Ich hoffe, der obige Inhalt kann Ihnen helfen, die Funktion cType_cntrl besser zu verstehen und zu verwenden, um die Suche und den Austausch von Steuerzeichen in Saiten zu realisieren.
<?php
// Beispiel für Zykluserkennung und Austausch
function replaceControlChars($str, $replacement = '') {
$result = '';
$length = strlen($str);
for ($i = 0; $i < $length; $i++) {
$char = $str[$i];
if (ctype_cntrl($char)) {
$result .= $replacement;
} else {
$result .= $char;
}
}
return $result;
}
$input = "Hello\nWorld\t!";
$output = replaceControlChars($input, ' ');
echo $output; // Hello World !
?>
<?php
// Beispiel für regelmäßiges Ausdrucksersatz
$input = "Line1\r\nLine2\tEnd";
$output = preg_replace('/[\x00-\x1F\x7F]/', '', $input);
echo $output; // Line1Line2End
?>
<?php
// Erkennen Sie zuerst das Beispiel und ersetzen Sie das Beispiel
function hasControlChars($str) {
$length = strlen($str);
for ($i = 0; $i < $length; $i++) {
if (ctype_cntrl($str[$i])) {
return true;
}
}
return false;
}
$input = "Test\nString";
if (hasControlChars($input)) {
$cleaned = preg_replace('/[\x00-\x1F\x7F]/', '', $input);
echo $cleaned;
} else {
echo $input;
}
?>