Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.php > #4668 > unrolled thread

URL aus Benutzereingabe erzeugen

Started byDaniel Walz <daniel.walz@gmx.de>
First post2021-02-02 17:32 +0100
Last post2021-02-03 09:30 +0100
Articles 3 — 2 participants

Back to article view | Back to de.comp.lang.php


Contents

  URL aus Benutzereingabe erzeugen Daniel Walz <daniel.walz@gmx.de> - 2021-02-02 17:32 +0100
    Re: URL aus Benutzereingabe erzeugen Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2021-02-02 18:58 +0000
      Re: URL aus Benutzereingabe erzeugen Daniel Walz <daniel.walz@gmx.de> - 2021-02-03 09:30 +0100

#4668 — URL aus Benutzereingabe erzeugen

FromDaniel Walz <daniel.walz@gmx.de>
Date2021-02-02 17:32 +0100
SubjectURL aus Benutzereingabe erzeugen
Message-ID<i7td4nF7nloU1@mid.individual.net>
Hallo,

ich programmiere derzeit meine zimelich in die Jahre gekommene Seite
www.drarbeit.de neu.

Zukünftig soll der Titel der Stellenangebote Teil der URL sein. Dazu
muss ich ihn natürlich anpassen. Leider habe ich keine entsprechende
Funktion gefunden, die ich als Vorbild hätte nehmen können, und mir
jetzt auf die schnelle folgende gebastelt:

function makeURL(string $s): string
{
    // alles in Kleinbuchstaben
    $url = mb_strtolower($s);
    // Umlaute und ß ersetzen
    $url = str_replace(['ä', 'ö', 'ü', 'ß'], ['ae', 'oe',
    'ue', 'ss'], $url);
    // Sonderzeichen ersetzen durch Minus
    $url = preg_replace("/[^a-z0-9]/", "-", $url);
    // mehrfache Minus ersetzen
    $url = preg_replace("/-+/", "-", $url);
    // Minus am Anfang und Ende ersetzen
    $url = trim($url, '-');
    return $url;
}

Das funktioniert auch soweit, ich habe es mit realen Eingaben hier mal
getestet:

https://www.yourmed.de/test.php

Was mich sehr irritiert ist, dass nach dem ersten preg-replace jetzt
alle " durch "quot" und & durch "amp" ersetzt sind anstatt durch ein
einfaches Minus. Wie kommt das zustande und wie kann ich es ändern?

Gruß

Daniel

[toc] | [next] | [standalone]


#4669

FromStefan+Usenet@Froehlich.Priv.at (Stefan Froehlich)
Date2021-02-02 18:58 +0000
Message-ID<1t60199f15i7a2en3e8%sfroehli@Froehlich.Priv.at>
In reply to#4668
On Tue, 02 Feb 2021 17:32:23 Daniel Walz wrote:
> function makeURL(string $s): string
> {
>     // alles in Kleinbuchstaben
>     $url = mb_strtolower($s);
>     // Umlaute und ß ersetzen
>     $url = str_replace(['ä', 'ö', 'ü', 'ß'], ['ae', 'oe',
>     'ue', 'ss'], $url);
>     // Sonderzeichen ersetzen durch Minus
>     $url = preg_replace("/[^a-z0-9]/", "-", $url);
>     // mehrfache Minus ersetzen
>     $url = preg_replace("/-+/", "-", $url);
>     // Minus am Anfang und Ende ersetzen
>     $url = trim($url, '-');
>     return $url;
> }

> Was mich sehr irritiert ist, dass nach dem ersten preg-replace
> jetzt alle " durch "quot" und & durch "amp" ersetzt sind anstatt
> durch ein einfaches Minus. Wie kommt das zustande [...]

Wie auch immer test.php gestaltet ist, das passiert bei der Ausgabe,
nicht in der Funktion. Da ist wohl irgendwo ein htmlspecialchars()
zu viel im Spiel.

Servus,
   Stefan

-- 
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Stefan - welch toter Gedanke.
(Sloganizer)

[toc] | [prev] | [next] | [standalone]


#4670

FromDaniel Walz <daniel.walz@gmx.de>
Date2021-02-03 09:30 +0100
Message-ID<i7v59eFi1rhU1@mid.individual.net>
In reply to#4669
Stefan Froehlich schrieb am 02.02.2021 um 19:58:
> On Tue, 02 Feb 2021 17:32:23 Daniel Walz wrote:
>> function makeURL(string $s): string
>> {
>>     // alles in Kleinbuchstaben
>>     $url = mb_strtolower($s);
>>     // Umlaute und ß ersetzen
>>     $url = str_replace(['ä', 'ö', 'ü', 'ß'], ['ae', 'oe',
>>     'ue', 'ss'], $url);
>>     // Sonderzeichen ersetzen durch Minus
>>     $url = preg_replace("/[^a-z0-9]/", "-", $url);
>>     // mehrfache Minus ersetzen
>>     $url = preg_replace("/-+/", "-", $url);
>>     // Minus am Anfang und Ende ersetzen
>>     $url = trim($url, '-');
>>     return $url;
>> }
> 
>> Was mich sehr irritiert ist, dass nach dem ersten preg-replace
>> jetzt alle " durch "quot" und & durch "amp" ersetzt sind anstatt
>> durch ein einfaches Minus. Wie kommt das zustande [...]
> 
> Wie auch immer test.php gestaltet ist, das passiert bei der Ausgabe,
> nicht in der Funktion. Da ist wohl irgendwo ein htmlspecialchars()
> zu viel im Spiel.

Danke!!! Das ist tatsächlich das Problem gewesen.
Ich hatte vor Urzeiten (also 2002, als ich die Seite programmiert habe)
die Daten schon html-kodiert in die Datenbank gespeichert (weil ich
damals dachte, das sei effizienter).
Ein Blick in den Seitenquelltext hätte es mir gezeigt...

Gruß
Daniel



[toc] | [prev] | [standalone]


Back to top | Article view | de.comp.lang.php


csiph-web