Heim  >  Artikel  >  Backend-Entwicklung  >  Sind die Eingabeparameter $_GET[] nach der Umstellung des Projekts auf Linux standardmäßig urlencodiert? ? ?

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

WBOY
WBOYOriginal
2016-12-01 00:25:421195Durchsuche

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>

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>

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>

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>

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>

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

Stellungnahme:
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