umlaute in url ersetzen

vendy

Aktives Mitglied
hi,

ich habe meine alten in google indexierten urls:
http://www.kinder-archiv.de/detail/link-59.html

umgeschrieben, sodass sie nun den titel enthalten:
http://www.kinder-archiv.de/detail/Kidsact...edichte-59.html
(domain.de/detail/title-id.html)

weiterhin habe ich für die alten urls einen 301 redirect eingebaut, damit sie auf die neue url weiterleiten:
http://www.kinder-archiv.de/detail/link-59.html

das klappt auch wunderbar, solange die url keine umlaute besitzt, siehe hier:
http://www.kinder-archiv.de/detail/link-333.html

die umlaute sollten aber ersetzt werden damit die url so aussieht:
http://www.kinder-archiv.de/detail/Gluewue...n_e.V.-333.html


der code dafür sieht wie folgt aus:
require_once 'init.php';
CODE
if (ENABLE_REWRITE == 1)
{
preg_match ('`(\d+)\.htm[l]?$`', request_uri(), $matches);
// Determine link ID
$id = (!empty ($matches[1]) ? intval ($matches[1]) : 0);

$cdata2 = $db->GetRow("SELECT * FROM {$tables['link']['name']} WHERE `ID` = ".$db->qstr($id));
$ctree = $cdata2['TITLE'];

$umlaute = array("ä","ö","ü","Ü","Ä","Ö","ß"," ","Ä","Ö","&Uuml","&auml","ö","ü");
$keineuml = array("ae","oe","ue","Ue","Ae","Oe","ss", "_","Ae","Oe","Ue","ae","oe","ue");
$title2 = str_replace($umlaute, $keineuml, $ctree);

$aufruf = $_SERVER["REQUEST_URI"];
if($aufruf == "/detail/link-$id.html" || $aufruf == "//detail/link-$id.html")
{
header("HTTP/1.1 301 Moved Permanently");
header("Status: 301 Moved Permanently");
header("Location: [URL=http://www.kinder-archiv.de/detail/$title2-$id.html");]http://www.kinder-archiv.de/detail/$t...id.html");[/URL]
header("Connection: close");
exit();
}
}


ich habe die datei im ANSI format gespeichert. habe es auch im UTF und ISO format versucht, aber dann wird entweder nur quatsch angezeigt oder die ganze seite falsch interpretiert.

kann mir wer weiterhelfen?

grüße,
ven
 
PHP scheint da heftige Probleme mit Umlauten zu haben.

Etwas analoges wurde hier diskutiert und schließlich auch gelöst.
 
da ich ja keine umlaute vergleichen möchte, sollte es mit der speicherung im UTF format ja eigentlich getan sein? funktioniert aber leider nicht. habe die .php datei mit dem windowseditor im UTF format gespeichert und hochgeladen. ausgabe ist:

CODE 
unter seiteninformationen steht: Kodierung: ISO-8859-15

 
Hi

Im Html-Header musst Du

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">

angeben, damit der Browser auf utf8 umschaltet.

Die komischen Zeichen sind zur Kennung für z.B Editor gedacht.

Grüsse
yam
 
Hallo,

oben sagtest Du noch:QUOTE unter seiteninformationen steht: Kodierung: ISO-8859-15


?
 
ja, wenn ich die per windows editor öffne und als datei mit UTF kodierung speichere.

dann funktioniert nämlich garnichts mehr und es wird nur folgendes angezeigt:
CODE 


unter seiteninformationen steht dann: Kodierung: ISO-8859-15
 
QUOTE (vendy @ Mi 7.3.2007, 22:14)da ich ja keine umlaute vergleichen möchte

Damit


QUOTE $title2 = str_replace($umlaute, $keineuml, $ctree);


vergleichst Du Umlaute.


QUOTE (vendy @ Mi 7.3.2007, 22:14)sollte es mit der speicherung im UTF format ja eigentlich getan sein? funktioniert aber leider nicht.


Wenn Du den oben verlinkten Thread vollständig durcharbeiten würdest, dann wüßtest Du, daß das mit UTF-8 in deinem Fall höchstwahrscheinlich nicht funktioniert - dazu bräuchtest Du dann die m-Stringfunktionen.
 
Deine UTF-Kodierung ist richtig, und die Ausgabe ist verständlich. Das ist kein Fehler von PHP, und genaugenommen ist es überhaupt kein Fehler sondern ein Missverständnis.

Das:
QUOTE 


Ist der so genannte BOM (das steht kurz für "Byte order mark" (?))

Notepad und einige andere Windows-Editoren setzen diese 3 Byte am Anfang einer Datei die im UTF-8 Format gespeichert ist. Damit ist es einfacher für Editoren herauszufinden welcher Zeichensatz benötigt wird, um eine Datei korrekt dazu stellen. Also ganz simpel: Wenn eine Text-Datei geöffnet wird, werden die ersten 2-4 Byte der Datei gelesen und wenn das ein BOM ist, weiß der Editor: "aha, so ist der Inhalt also zu verstehen"

Das Problem ist, der Webserver schickt diese BOM als Ausgabe direkt mit (in der PHP Datei steht es schließlich vor dem öffnenden PHP-Tags) an den Browser. Der Webserver weiß nun nicht was er machen soll, denn nach dem HTT-Protokoll dürfen vor dem HTTP-Header keine Zeichen kommen. Daher schickt er einfach die Zeichen mit seinem Standard-Header, und der nachvollgende Header (den dein Script generieren will) wird weggeschmissen.

Nun da deine PHP-Datei schon kodiert ist, gibt es eine recht einfache Lösung. Hol dir einen Hex-Editor und lösch aus der Datei die ersten 3 Bytes. Empfehlen kann ich da: XVI32 (Direkter Download)

Für weitere Bearbeitungen würde ich dir einen anderen Editor empfehlen, bei dem man BOMs abschalten kann. Da gibt es einige, mir fällt aber spontan keiner ein. Glaube "Phase 5" kann das.
 
Alles klar, danke! Habe meine mit dem WindowsEditor im UTF8-Format gespeicherte .php Datei mittels HEX-Editor geöffnet und die genannten drei Zeichen entfernt. Hochgeladen, klappt. Klappt dann anscheinend auch ohne die m-Stringfunktionen.
 
QUOTE (Maik @ Fr 9.3.2007, 0:28) Für weitere Bearbeitungen würde ich dir einen anderen Editor empfehlen, bei dem man BOMs abschalten kann. Da gibt es einige, mir fällt aber spontan keiner ein. Glaube "Phase 5" kann das.

Phase 5 hat leider überhaupt keine Unterstützung von UTF. Notepad++ und SuperEdi unterstützen UTF-8 und dort kann man das BOM auch entfernen
 
Zurück
Oben