Eine Erklärung einiger seltsamer Verhaltensweisen der strtr-Funktion in PHP

不言
Freigeben: 2023-04-01 21:42:01
Original
1495 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich die Erklärung einiger seltsamer Verhaltensweisen der strtr-Funktion in PHP vor. Jetzt kann ich ihn mit Ihnen teilen.

Einige seltsame Verhaltensweisen von strtr Funktion in PHP Erklärung des Verhaltens

Vor ein paar Tagen schickte mir ein Freund einen Artikel zum Lesen, in dem er sagte, dass die strtr-Funktion einige seltsame Verhaltensweisen aufweist

Beim Betrachten des Quellcodes von PHP habe ich Ich habe die folgende Erklärung erhalten:

[Seltsames Verhalten 1]
Werfen wir zunächst einen Blick auf die beiden Zustände dieser PHP-String-Ersetzungsfunktion strtr()
strtr(string,from,to)
oder strtr(string,array )
Zunächst für die erste Methode der strtr-Funktion
Sehen wir uns das folgende Beispiel an:

   echo strtr("I Love you","Lo","lO");
Nach dem Login kopieren

Das erhaltene Ergebnis ist
ICH LIEBE DICH

Dieses Ergebnis erinnert uns

1.strtr Es wird zwischen Groß- und Kleinschreibung unterschieden

[Quellcode-Analyse 1]
Die endgültige Implementierungsfunktion der strtr-Funktion ist php_strtr Funktion in Zeile 2670 der Datei string.c Der Quellcode lautet wie folgt:

   PHPAPI char *php_strtr(char *str, int len, char *str_from, char *str_to, int trlen){int i;unsigned char xlat[256]; 
 if ((trlen < 1) || (len < 1)) {return str;} 
 for (i = 0; i < 256; xlat[i] = i, i++); 
 for (i = 0; i < trlen; i++) {xlat[(unsigned char) str_from[i]] = str_to[i];} 
 for (i = 0; i < len; i++) {str[i] = xlat[(unsigned char) str[i]];} 
 return str;}
Nach dem Login kopieren

Die gesamte Funktion führt eine Hash-Ersetzung für 256 Zeichen durch. Natürlich enthalten diese 256 Zeichen Groß- und Kleinbuchstaben

[Seltsames Verhalten 2]

2.strtr-Ersatz ist etwas ganz Besonderes. Das O in der Mitte ist offensichtlich nicht unsere Absicht Zeichen basieren auf Zeichen, daher ist die Ersetzung ein Zeichen, keine Zeichenfolge

[Seltsames Verhalten 3]

Geben Sie ein weiteres spezielles Beispiel zur Veranschaulichung dieser PHP-STTR-Funktion. Das seltsame Ergebnis von

   echo strtr("I Love you","Love","");
Nach dem Login kopieren

ist

I Love you

und ändert nichts. Strtr muss also darauf achten, dass es nicht durch empty ersetzt werden kann, was der letzte Parameter ist ein leerer String sein, Leerzeichen sind natürlich erlaubt.

[Quellcode-Analyse drei]

In Zeile 2833 der Datei string.c können wir sehen, dass das aufrufende Programm wie folgt lautet:

   php_strtr(Z_STRVAL_P(return_value),
 Z_STRLEN_P(return_value),
 Z_STRVAL_PP(from),
 Z_STRVAL_PP(to),
 MIN(Z_STRLEN_PP(from), 
 Z_STRLEN_PP(to)));
Nach dem Login kopieren

MIN(Z_STRLEN_PP( from), Z_STRLEN_PP (to)) ist die kleinste der Längen der beiden Strings from und to. In dem in Abbildung 3 gezeigten Fall ist das Ergebnis 0. Aus der Funktion php_strtr können wir sehen, dass

if ((trlen < 1) || (len < 1)) {return str;}
Nach dem Login kopieren

wenn die Länge kleiner als 1 ist. Gibt die ursprüngliche Zeichenfolge zurück. Also. . . .

[Seltsames Verhalten 4]

Ein weiteres Beispiel für die Strtr-Funktion

 echo strtr("I Loves you","Love","lOvEA");
Nach dem Login kopieren
Das Ergebnis ist

I lOvEs yOu

Achten Sie darauf der dritte Parameter A. Er erscheint nicht im Ergebnis

[Quellcode-Analyse drei]

Der Grund ist ähnlich wie beim zweiten MIN(Z_STRLEN_PP(from), Z_STRLEN_PP(to)) nimmt beides von und bis. Die kleinste der Längen von Zeichenfolgen

rrree

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Lernen aller hilfreich ist. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.


Verwandte Empfehlungen:

Über die Analyse von HashTable im PHP-Quellcode

Über die Analyse von Zend HashTable im PHP-Quellcode

Das obige ist der detaillierte Inhalt vonEine Erklärung einiger seltsamer Verhaltensweisen der strtr-Funktion in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!