2016-04-04 7 views
0

Ich habe diese Datei resizeImage.php php, die wie folgt genannt werden kann -Richtiger Weg, um URL-Parameter aus einer htmlentities() codierten URL zu extrahieren?

http://<domain>/fam/resizeImage.php?&srcImg=<url encoded URL of a remote image>&width=<width>&height=<height> 

erfordert jedoch ein anderes Modul die htmlentities Version dieser URL-kodiert, auf diese Weise -

htmlentities(http://<domain>/fam/resizeImage.php?srcImg=<url encoded url>&width=<width>&height=<height>) 

So , folgt eine Beispiel-URL, die aufgerufen wird -

http://<domain>/fam/resizeImage.php?srcImg=https%3A%2F%2Flh3.googleusercontent.com%2FVRY0O_3L8VH2wxJSTiKPr72PeM5uhPPFEsHzzYdxenddpTI150M0TYpljnZisQaROR0%3Dh256-rw&amp;width=640&amp;height=960 

Nun wird der Antrag von resizeImage.php empfangen, aber ich bin nicht in der Lage, die Parameter zu erhalten mit $ _REQUEST [ 'width'] Breite, aber ich kann Folgendes tun -

  • get htmlentities_decode ($ _ SERVER [ 'REQUEST_URI'])
  • explodieren sie & mit den Parameter-Wert-Paare zu erhalten.
  • explodieren mit =, um Werte gegen Parameter zu erhalten.

also zwei Dinge -

  • Ich habe mich gefragt, ob dies der richtige Weg ist, um die Parameter in diesem Szenario zu extrahieren.
  • Ich kenne nicht den Grund, warum das aufrufende Modul die htmlentities-codierte URL aufruft. Könnte es einen besseren Weg geben, sie vorzuschlagen?
+0

"Ich kenne nicht den Grund, warum das aufrufende Modul die htmlentities-codierte URL aufruft." - Es muss ein Fehler im aufrufenden Modul sein. Sie verwenden htmlentities, um eine URL (oder einen anderen Inhalt) in HTML einzufügen. Es wird dann vom HTML-Parser entschlüsselt. Wenn es für HTML codiert und dann als reine Text-URL behandelt wird, dann ist das ein Fehler. – Quentin

+0

Codeigniters '$ this-> uri-> Segment (n)' macht das gleiche. Vielleicht möchten Sie das studieren? https://github.com/bcit-ci/CodeIgniter/blob/develop/system/core/URI.php –

Antwort

0

In einigen Fällen, wenn Menschen HTML-Code in get Parameter htmlentities auf einzelne Parameter senden könnte in Ordnung sein, wenn es um das Etikett kommt, aber nicht für den Link selbst - sie sollten urlencode dafür verwenden:

<a href="htpp://yourdomain.tld/?param1=<?php echo urlencode('<somehtmltag>'); ?>>htpp://yourdomain.tld/?param1=<?php echo htmlentities('<somehtmltag>'); ?></a> 
0

können Sie PHP-interne Funktionen verwenden, um URLs zu analysieren und entschlüsseln:

Also hier ist ein Beispiel-Code zu analysieren, was ich mit kommen werde (you can try it out here) :

$parsed = parse_url($url); 
parse_str(urldecode(html_entity_decode($parsed['query'], ENT_HTML401)), $tmp); 

var_dump($tmp); 

..., die Ihre URL-Parameter in ein assoziatives Array macht:

array(3) { 
    ["srcImg"]=> 
    string(109) "https://lh3.googleusercontent.com/VRY0O_3L8VH2wxJSTiKPr72PeM5uhPPFEsHzzYdxenddpTI150M0TYpljnZisQaROR0=h256-rw" 
    ["width"]=> 
    string(3) "640" 
    ["height"]=> 
    string(3) "960" 
} 

Wie im zweiten Teil, denke ich, der Ansatz des zweiten Moduls ist ein wenig sicherer, da Sie eine URL in einen URL-Parameter platzieren. Wenn Sie keine unnötigen Parsing- und Stripping-Elemente aus dem Parameter entfernen möchten, ist die Kodierung des Ganzen eine einfache und sichere Methode, um Ihre URL vor Syntaxfehlern zu schützen.

Verwandte Themen