URL aus Benutzereingabe erzeugen

3 views
Skip to first unread message

Daniel Walz

unread,
Feb 2, 2021, 11:32:24 AMFeb 2
to
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

Stefan Froehlich

unread,
Feb 2, 2021, 1:59:00 PMFeb 2
to
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)

Daniel Walz

unread,
Feb 3, 2021, 3:30:40 AMFeb 3
to
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




Reply all
Reply to author
Forward
0 new messages