zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Suche PHP Funktion die URL Fähige Strings aus utf8 strings erzeugt

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 06.02.2009, 18:54
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.09.2003
Beiträge: 243
braindead befindet sich auf einem aufstrebenden Ast
Standard Suche PHP Funktion die URL Fähige Strings aus utf8 strings erzeugt

Hi,
ich suche eine PHP Stringfunktion die UTF8 Strings Umwandelt in URL "Fähige" Strings.
Konkret nutze ich UTF8 Strings aus einer Datenbank um sie in als Teile von urls zu benutzen (die ich dann mittels rewrite Methoden auf dynamisch erstellte Dokumente weiterleite).
Mein Problem sind eigentlich zwei Probleme:
1. Kann ich die UTF8 Strings nicht unmanipuliert als url Bestandteile nutzen weil dort Sonderzeichen enthalten sind die die meisten Browser nicht unterstützen in urls, von Serverseitigen Problemen mal abgesehen. Deshalb brauche ich zunächst eine Umwandlung.
Die Umwandlung soll allerdings etwas spezifischer sein was mich zu meinem zweiten Problem führt:
2. Da diese generierten URLs unter anderen den Zweck erfüllen sollen das sie den Webseitenbesuchern als Erkennungs- oder Erinnerungshilfe dienen sollen, sollten die nicht unterstützten Zeichen natürlich nicht einfach beliebige Zeichen umgewandelt werden, ich hätte z.B. gerne: ä->ae oder wenn das nicht geht ä->a, aber auch zeichen wie: à, â, å usw. sollen in a und nicht in e oder so, ersetzt werden, weil damit für deutsche Besucher (und für die ist die Seite optimiert) noch eine gewisse Ähnlichkeit zu den originalen Zeichen erhalten bleibt.

Meine bisherige Methode, die Strings durch eine schar str-replaces zu jagen macht in sofern Probleme das ich immer wieder überraschend auf neue Abwandlungen von Buchstaben stoße die ich vorher nicht kannte. Man glaubt es kaum wie viele Möglichkeiten es gibt a, e usw. mit Strichen, Punkten, etc zu versehen.

Geändert von braindead (06.02.2009 um 18:57 Uhr)
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 06.02.2009, 19:27
Benutzerbild von Gumbo
XHTMLforum-Kenner
 
Registriert seit: 22.08.2004
Ort: Trier
Beiträge: 2.737
Gumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekannt
Standard

URL-konform ist bereits der Rückgabewert der rawurlencode()-Funktion. Bei UTF-8 würden sogar in der Adressfeld die kodierten Zeichen statt der Kodierungen angezeigt werden.

Da du das aber wohl nicht möchtest, könntest du die iconv()-Funktion nutzen, um die Nicht-ASCII-Zeichen durch eine Transliteration zu ersetzen:
PHP-Code:
iconv('UTF-8''ASCII//TRANSLIT'$str
Dadurch gehen aber eben alle Nicht-ASCII-Zeichen verloren. Eine Konvertierung wie du sie möchtest, müsste also vorher vorgenommen werden.
__________________
Markus Wulftange
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 06.02.2009, 19:28
Benutzerbild von toscho
Perplexifikator
XHTMLforum-Kenner
 
Registriert seit: 22.05.2004
Ort: Halle/Saale
Beiträge: 1.566
toscho sorgt für eine eindrucksvolle Atmosphäretoscho sorgt für eine eindrucksvolle Atmosphäre
Standard

Da es für so eine Umschreibung keine feste Norm gibt, die alle Fälle erfaßt, wirst du um eine manuell gepflegte Liste nicht herumkommen.

Ein str_replace() genügt: Die Funktion akzeptiert auch Arrays als Parameter.
__________________
toscho.de
Mit Zitat antworten
  #4 (permalink)  
Alt 06.02.2009, 19:47
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.09.2003
Beiträge: 243
braindead befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Gumbo Beitrag anzeigen
URL-konform ist bereits der Rückgabewert der rawurlencode()-Funktion. Bei UTF-8 würden sogar in der Adressfeld die kodierten Zeichen statt der Kodierungen angezeigt werden.

Da du das aber wohl nicht möchtest, könntest du die iconv()-Funktion nutzen, um die Nicht-ASCII-Zeichen durch eine Transliteration zu ersetzen:
PHP-Code:
iconv('UTF-8''ASCII//TRANSLIT'$str
Dadurch gehen aber eben alle Nicht-ASCII-Zeichen verloren. Eine Konvertierung wie du sie möchtest, müsste also vorher vorgenommen werden.
Inwiefern gehen mir hier die nicht ASCII Zeichen verloren? Laut beschreibung der Funktion würde bei obiger Anwendung die UTF-8 Zeichen durch ähnliche ASCII Zeichen ersetzt werden, das ist ja genau das was ich will. Das diese Zuordnung nicht Injektiv ist stört mich nicht, da ich andere Methoden habe um den "reduzierten" String einer dynamisch generierten Seite zuzuordnen. Oder habe hier was falsch verstanden?
Mit Zitat antworten
  #5 (permalink)  
Alt 06.02.2009, 20:37
Benutzerbild von Gumbo
XHTMLforum-Kenner
 
Registriert seit: 22.08.2004
Ort: Trier
Beiträge: 2.737
Gumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekannt
Standard

Es sind eben nur ähnliche Zeichen und manche Zeichen können gar nicht überführt werden, was zu einer Fehlermeldung führt. Um das zu vermeiden, solltest du noch zusätzlich ein //IGNORE anfügen, also ASCII//TRANSLIT//IGNORE.
__________________
Markus Wulftange
Mit Zitat antworten
  #6 (permalink)  
Alt 06.02.2009, 20:48
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.09.2003
Beiträge: 243
braindead befindet sich auf einem aufstrebenden Ast
Standard

Ok danke, ich werde mal ein paar Tests durchführen, und zur Not den String vorher schonmal mit str_replace überarbeiten (insbesondere um die deutschen Umlaute durch Doppelbuchstaben zu ersetzen) und den string erst danach mit iconv behandeln (um nicht berücksichtigte Sonderzeichen noch abfangen zu können)
Mit Zitat antworten
  #7 (permalink)  
Alt 06.02.2009, 20:53
Benutzerbild von Gumbo
XHTMLforum-Kenner
 
Registriert seit: 22.08.2004
Ort: Trier
Beiträge: 2.737
Gumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekannt
Standard

Wie gesagt: Du könntest die Zeichen ja auch direkt verwenden und müsstest nur noch die rawurlencode()-Funktion darauf anwenden.
__________________
Markus Wulftange
Mit Zitat antworten
  #8 (permalink)  
Alt 06.02.2009, 21:03
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.09.2003
Beiträge: 243
braindead befindet sich auf einem aufstrebenden Ast
Standard

Hmm es scheint so als würde iconv bei angabe von //IGNORE die oben genannten Variationen von a (inklusive des deutchen ä) nicht ignorieren sondern durch ? ersetzen. Ich denke nicht das es an meiner Darstellung liegt, denn die Seite wird als utf8 dokument geliefert und angezeigt und die utf8 Zeichen (die Variationen von a) werden korrekt angezeigt, nur der auch ausgegebene iconv behandelte String enthält nur "?". Soll das so sein oder kann das doch ein Darstellungsfehler sein?

EDIT: ich lese gerade das mein Problem irgentwie mit setlocale zusammenhängt. Keine Ahnung ob ich darauf Einfluss habe, mal schauen was das überhaupt ist
Mit Zitat antworten
  #9 (permalink)  
Alt 06.02.2009, 21:12
Benutzerbild von Gumbo
XHTMLforum-Kenner
 
Registriert seit: 22.08.2004
Ort: Trier
Beiträge: 2.737
Gumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekannt
Standard

Dann liegen die Daten wohl nicht in UTF-8 vor. Schau mal, was Folgedes ausgibt:
PHP-Code:
$str "\xC3\xA4"// entspricht UTF-8 ä (U+00E4)
echo $str// UTF-8-Ausgabe
echo utf8_decode($str); // ISO-8859-1-Ausgabe 
Ich wette, dass die Aussgabe wie folgt aussieht: „¤ä“.
__________________
Markus Wulftange
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 06.02.2009, 21:16
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.09.2003
Beiträge: 243
braindead befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Gumbo Beitrag anzeigen
Wie gesagt: Du könntest die Zeichen ja auch direkt verwenden und müsstest nur noch die rawurlencode()-Funktion darauf anwenden.
Das wäre ein Möglichkeit wenn ich mit iconv oder str_replace nicht auskomme. Mich stört hier nur die Umwandlung in %hexwert, ich empfinde das als wenig Ästetisch (inwieweit sowas überhaupt ein Rolle spielen sollte, ist ein anderes Thema ). Zumindest merke ich gerade das mir iconv wohl ausscheidet, denn ich wage es nicht mit setlocale herumzuspielen. Dann werde ich wohl bei str_replace bleiben müssen.
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Float-Reihenfolge? wolf1985 CSS 0 21.08.2008 01:35
Footer left und right Probleme... wolf1985 CSS 2 14.08.2008 13:04
Dateien auslagern - Include und PHP ArcVieh Serveradministration und serverseitige Scripte 17 27.03.2008 18:09
Problem mit Layout .. vermute: float Küspert CSS 3 09.12.2006 17:09
Bilder werden überlagert und verschoben. Küspert CSS 5 07.12.2006 17:15


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:42 Uhr.