Sind die Eingabeparameter $_GET[] nach der Umstellung des Projekts auf Linux standardmäßig urlencodiert? ? ?

WBOY
Freigeben: 2023-03-01 17:40:02
Original
1315 Leute haben es durchsucht

Es stellt sich heraus

Server: Win2003 + IIS läuft normal ohne Probleme
Lokal: Win10 + Apache und Win10 + Nginx läuft normal ohne Probleme

Jetzt

Beim Projekt, das kürzlich Alibaba Cloud CentOS7.2 und nginx1.10.2 ersetzt hat, ist ein Problem aufgetreten.

Spezifische Fragen (das Projekt ist in ThinkPHP3.2.3 geschrieben)

Auf der Seite gibt es ein Formular zum Suchen und zum Abrufen von Daten für die Suche. Nach dem Klicken auf die Schaltfläche wird die folgende URL erstellt

<code>/index.php/User/index.html?key=刘</code>
Nach dem Login kopieren
Nach dem Login kopieren

Ich verwende I('key') (TP-gekapselte Methode zum Abrufen von Eingabevariablen ähnlich wie $_GET['key']) im Controller, um dieses Schlüsselwort abzurufen, und dann ist die Generierung von Seitennummernlinks ähnlich an die folgende URL

<code>/index.php/User/index/key/刘/p/2.html</code>
Nach dem Login kopieren
Nach dem Login kopieren

Wenn Sie oben auf den Seitenzahl-Link klicken, um umzublättern:

  • Egal, wie Sie den Schlüssel lokal oder vom ursprünglichen Server erhalten, es ist die Zeichenfolge „Liu“

  • Aber auf dem neuen Server ist das erhaltene Schlüsselwort die Zeichenfolge „%e5%88%98“

Dies führte dazu, dass alle meine ursprünglichen Programme mit dieser Art der Suche ungültig wurden und keine Seiten mehr umblättern konnten.

Lösungen, die ich ausprobiert habe

  • Ich ('Schlüssel') urldekodiert die Abrufdaten, wenn ich sie erhalte, aber ich habe festgestellt, dass ich nur eine Seite umblättern kann. Wenn ich es noch einmal mache, wird der Schlüssel erneut urlkodiert, und zwar unendlich dekodiert, egal wie oft der URL-Code aufgerufen wird

  • Da das URL-Muster nicht geändert werden kann, habe ich diese Methode aufgegeben

Warum?

Win+IIS Win+nginx ist kein Problem. Warum tritt dieses Problem bei der Verwendung von Linux+Nginx auf? Liegt das an mir, Linux oder Nginx?

Wir sind sehr darauf bedacht, das Projekt wieder normal zu machen, bitte helfen Sie uns

Antwortinhalt:

Es stellt sich heraus

Server: Win2003 + IIS läuft normal ohne Probleme
Lokal: Win10 + Apache und Win10 + Nginx läuft normal ohne Probleme

Jetzt

Beim Projekt, das kürzlich Alibaba Cloud CentOS7.2 und nginx1.10.2 ersetzt hat, ist ein Problem aufgetreten.

Spezifische Fragen (das Projekt ist in ThinkPHP3.2.3 geschrieben)

Auf der Seite gibt es ein Formular zum Suchen und zum Abrufen von Daten für die Suche. Nach dem Klicken auf die Schaltfläche wird die folgende URL erstellt

<code>/index.php/User/index.html?key=刘</code>
Nach dem Login kopieren
Nach dem Login kopieren

Ich verwende I('key') (TP-gekapselte Methode zum Abrufen von Eingabevariablen ähnlich wie $_GET['key']) im Controller, um dieses Schlüsselwort abzurufen, und dann ist die Generierung von Seitennummernlinks ähnlich an die folgende URL

<code>/index.php/User/index/key/刘/p/2.html</code>
Nach dem Login kopieren
Nach dem Login kopieren

Wenn Sie oben auf den Seitenzahl-Link klicken, um umzublättern:

  • Egal, wie Sie den Schlüssel lokal oder vom ursprünglichen Server erhalten, es ist die Zeichenfolge „Liu“

  • Aber auf dem neuen Server ist das erhaltene Schlüsselwort die Zeichenfolge „%e5%88%98“

Dies führte dazu, dass alle meine ursprünglichen Programme mit dieser Art der Suche ungültig wurden und keine Seiten mehr umblättern konnten.

Lösungen, die ich ausprobiert habe

  • Ich ('Schlüssel') urldekodiert die Abrufdaten, wenn ich sie erhalte, aber ich habe festgestellt, dass ich nur eine Seite umblättern kann. Wenn ich es noch einmal mache, wird der Schlüssel erneut urlkodiert, und zwar unendlich dekodiert, egal wie oft der URL-Code aufgerufen wird

  • Da das URL-Muster nicht geändert werden kann, habe ich diese Methode aufgegeben

Warum?

Win+IIS Win+nginx ist kein Problem. Warum tritt dieses Problem bei der Verwendung von Linux+Nginx auf? Liegt das an mir, Linux oder Nginx?

Wir sind sehr darauf bedacht, das Projekt wieder normal zu machen, bitte helfen Sie uns

Beim Generieren der URL im Quellcode von TP-Paging wird der URL-Code-Vorgang ausgeführt

<code>private function url($page){
        return str_replace(urlencode('[PAGE]'), $page, $this->url);
    }</code>
Nach dem Login kopieren

Lösung: Sie können den Suchparameter als dritten Parameter übergeben, wenn Sie die Paging-Klasse instanziieren. Weitere Informationen finden Sie in der Konstruktionsmethode der Page-Klasse

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!