Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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]

Geschrieben

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 ;)

Geschrieben

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.

Geschrieben

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]

_________________

Geschrieben

/^(<+.*>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

Geschrieben

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!

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...