Veröffentlicht 22. Juni 200520 j 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]
23. Juni 200520 j Autor 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
23. Juni 200520 j Autor 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.
23. Juni 200520 j Autor 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] _________________
23. Juni 200520 j /^(<+.*>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
23. Juni 200520 j Autor 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!
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.