LordHexa Geschrieben 22. Juni 2005 Geschrieben 22. Juni 2005 Hallo zusammen, ich hab mir eine Funktion gebaut, mit deren Hilfe ich Nicht-IDN-Konforme Domains umkonvertiere. Nun brauche ich jedoch genau den umgekehrten Weg. Hier die Funktion <?php $charset = "ISO-8859-1"; $domain_liste = split("\n",$liste); foreach($domain_liste as $domain){ $domain = idn_to_ascii($domain, $charset); echo $domain; echo "<br>"; } ?> [/PHP]
Amstelchen Geschrieben 22. Juni 2005 Geschrieben 22. Juni 2005 punycode/Unicode und umgekehrt converter IDNA Convert s'Amstel
LordHexa Geschrieben 23. Juni 2005 Autor Geschrieben 23. Juni 2005 Hat mir irgendwie nicht viel geholfen Also, das Problem ist : Ich lese das HTML-File ein und will nun den zu encodierenden Pattern zwischen $Anfang(">http://") und $Ende("</a>") suchen lassen und diesen eben mit $Pattern = utf8_encode($Pattern); encodieren. Da es sich jedoch um viele solcher Pattern handelt und auch ständig welche hinzukommen, stehe ich vor einem Prob. Hinzu kommt, das mein Urlaub davon abhängt
LordHexa Geschrieben 23. Juni 2005 Autor Geschrieben 23. Juni 2005 Also, ich hab mir da jetzt mal was gebastelt, aber das ist keine optimale Lösung. <?php $html = '<A HREF="http://xn--gnstige-aluminiumfelgen-cpc.de/">http://xn--gnstige-aluminiumfelgen-cpc.de/</A></FONT><A HREF="http://www.google.de/">http://www.google.de/</A></FONT>'; preg_match_all("|<A.*?>http://(.*?)</A>|i", $html, $treffer, PREG_PATTERN_ORDER); print_r($treffer); ?> [/PHP] Das Problem ist, ich kann $home nicht "so" einsetzen wie im Beispiel, da ständig Domains hinzukommen, bzw. wegfallen. Bräuchte also ne Art Wildcard die sagt : Wenn zwischen >http://(.*?)</A> die Zeichenfolge xn-- kommt, dann nimm alles was zischen >http:// und </A> steht, mach was tolles und dann tust du das ganze wieder in den String, damit ich die HTML-Datei wieder komplett angezeigt bekomme.
LordHexa Geschrieben 23. Juni 2005 Autor Geschrieben 23. Juni 2005 Ok, hab jetzt soweit alles. Das einzige, winzige Problem ist, das ich mit folgendem Code keines Matches bekomme, sprich : Er nix decodiert. ....................... while (!feof($fp)) { $line = fgets($fp); if (preg_match('/^(<+.*>http:\/\/+)(.*)(\/<\/A.*)/',$line,$matches) ) { $matches[2] = utf8_encode($matches[2]); $line = $matches[1].$matches[2].$matches[3]; } echo "\n\n$line"; } ................................ [/PHP] _________________
Monty82 Geschrieben 23. Juni 2005 Geschrieben 23. Juni 2005 /^(<+.*>http:\/\/+)(.*)(\/<\/A.*)/ Mal ein paar Anmerkungen zum regulären Ausdruck: ^: Steht der Link am Anfang der Zeile? <+.*> Können auch mehrere Links pro Zeile bestehen? Sonst hast Du nämlich ein Problem, dass diese mit in das <+.*> reinpassen, und nur der letzte genommen wird <\/A.*) Ist das A in den Files zwingend groß geschrieben? Ich bin mal so frei, und versuche ein wenig zu optimieren: /(<[^>]*>http:\/\/)(.*?)(\/<\/a>)/is
LordHexa Geschrieben 23. Juni 2005 Autor Geschrieben 23. Juni 2005 Ok, ich schreib jetzt einfach mal, wie es funktioniert.... .............................. $charset = "ISO-8859-1"; while (!feof($fp)) { $line = fgets($fp); if (preg_match('/^(<+.*>http:\/\/+)(.*)(\/<\/A.*)/',$line,$matches) ) { $matches[2] = idn_to_unicode($matches[2], $charset); $line = $matches[1].$matches[2].$matches[3]; } echo "\n\n$line"; } .............................. [/PHP] Wichtig : IDN-PHP Modul muss auf dem Server installiert sein!
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden