FIXED: Bei Textile "falsche" interne Links

Jede Art von Fehler die REDAXO betreffen.

FIXED: Bei Textile "falsche" interne Links

Beitragvon Stefan Brinkers » 4. Dez 2007, 15:24

Moin!

schaue zwar immer wieder im Forum vorbei, aber diesmal musste ich mich doch registrieren und selbst mal eine Frage loswerden...

- ich binde einen Link über Textile ein: "test":redaxo://2
-> es erscheint der richtige Link auf der Site: /irgendwas.html

- ich binde einen Link über Textile ein: "test2":redaxo://24
-> er erscheint der folgende Link: /irgendwas.html4

Woran kann das liegen? Mache ich irgendwas falsch?
Benutzt wird u.a. "real_url".

hier wird etwas Ähnliches bereits diskutiert - gibts da inzwischen eine Lösung?: http://forum.redaxo.de/ftopic3386.html
Benutzeravatar
Stefan Brinkers
 
Beiträge: 13
Registriert: 4. Dez 2007, 15:11
Wohnort: Oldenburg

Beitragvon Markus.Staab » 4. Dez 2007, 15:54

Hi Stefan,

du hast eine alte RegEx Lib, update dein PHP.

Viele Grüße,
Markus
Benutzeravatar
Markus.Staab
Entwickler
 
Beiträge: 9781
Registriert: 29. Jan 2005, 14:50
Wohnort: Aschaffenburg/Germany

Danke!

Beitragvon Stefan Brinkers » 4. Dez 2007, 16:25

Vielen Dank für die schnelle Antwort.

Dann warte ich mal auf den Reload des Servers :)

5.2.5 sollte ausreichen, oder?
Benutzeravatar
Stefan Brinkers
 
Beiträge: 13
Registriert: 4. Dez 2007, 15:11
Wohnort: Oldenburg

Beitragvon Stefan Brinkers » 5. Dez 2007, 10:26

Hallo nochmal,

nachdem nun auf PHP 5.2.5 umgestellt wurde scheint das Problem weiterhin zu bestehen. Habe ich neben der Umstellung noch etwas zu beachten?

siehe http://netsh70754.dbdserver.de/redaxo/
Benutzeravatar
Stefan Brinkers
 
Beiträge: 13
Registriert: 4. Dez 2007, 15:11
Wohnort: Oldenburg

Beitragvon Markus.Staab » 5. Dez 2007, 10:46

Hi,

werden die urls richtig generiert, wenn das Addon deaktiviert ist?
(url rewrite aber aktiviert lassen)

Gruß,
Markus
Benutzeravatar
Markus.Staab
Entwickler
 
Beiträge: 9781
Registriert: 29. Jan 2005, 14:50
Wohnort: Aschaffenburg/Germany

Beitragvon Stefan Brinkers » 5. Dez 2007, 11:20

ist mit "url rewrite" das mod_rewrite unter system gemeint?

also wenn ich das Addon "realurl" deaktiviere und mod_rewrite unter system weiterhin auf true steht, dann bleibt das Problem bestehen:
2-0-Das-Restaurant.html2 wenn eigentlich die Site mit der ID 22 verlinkt werden soll.

das Ganze passiert aber nur, wenn auf der selben Seite schon ein Link zur Seite mit der ID 2 vorhanden ist.

Ich denke am einfachsten wäre es vorerst statt des redaxo-Links (:redaxo://ID) einen Link mit http: direkt auf die richtige Seite zu verwenden. Aber das Problem an sich ist damit ja nicht behoben.

Oder hätte ich nach der Umstellung auf die andere PHP-Version, redaxo neu installieren müssen? :?
Benutzeravatar
Stefan Brinkers
 
Beiträge: 13
Registriert: 4. Dez 2007, 15:11
Wohnort: Oldenburg

Beitragvon Markus.Staab » 5. Dez 2007, 14:01

Hi,

dann ist es definitiv ein fehler in der regex lib... ist diese beim update von php mit aktualisiert worden?

Gruß,
Markus
Benutzeravatar
Markus.Staab
Entwickler
 
Beiträge: 9781
Registriert: 29. Jan 2005, 14:50
Wohnort: Aschaffenburg/Germany

Beitragvon Stefan Brinkers » 5. Dez 2007, 14:55

ist diese beim update von php mit aktualisiert worden?

Da müsste ich mal den Hoster fragen.

Kann ich in der phpinfo die Version der regex lib erkennen?
Welche würde denn benötigt werden?
Benutzeravatar
Stefan Brinkers
 
Beiträge: 13
Registriert: 4. Dez 2007, 15:11
Wohnort: Oldenburg

Beitragvon Stefan Brinkers » 6. Dez 2007, 10:06

so Antwort vom Hoster ist da:

vielen Dank für Ihre Nachricht. Das Update der php-Version beinhaltet alle in php befindlichen Libs. Externe so Module können noch die älteren Versionen sein. Dies ist im Regelfall aber kein Problem.


Gehört die regex Lib standardmäßig zu PHP? Dann sollte die also aktualisiert worden sein.
Was aber "Externe so Module" heißen soll bleibt mir ein Rätsel.
Benutzeravatar
Stefan Brinkers
 
Beiträge: 13
Registriert: 4. Dez 2007, 15:11
Wohnort: Oldenburg

Beitragvon Stefan Brinkers » 10. Dez 2007, 11:19

Hallo schon wieder,

habe mir das nochmal angeschaut:
wenn die URLs nicht umgeschrieben werde funktioniert es ja
(z.B.
Code: Alles auswählen
index.php?article_id=22
),

nur wenn ich die URLs leserlich haben möchte (z.B.
Code: Alles auswählen
22-0-test.html
oder
Code: Alles auswählen
test.html
) tauchen die Fehler auf (wenn Link zu Seite mit ID 2 schon auf der Seite vorhanden ist wird der Link zur Seite mit der ID 22 zu 2-0-seitenname.html2).

Heißt das nicht, das der Fehler z.B. in der "function_rex_url.inc.php" liegt, also irgendwo dort wo die URL "geformt" wird?

edit:
hmm, scheint also wirklich an diesem Code class.rex_article zu liegen:
Code: Alles auswählen
    // -- preg match redaxo://[ARTICLEID] --
    preg_match_all('/redaxo:\/\/([0-9]*)\/?/im',$content,$matches,PREG_SET_ORDER);
    foreach($matches as $match)
    {
      if(empty($match)) continue;

      $url = rex_getURL($match[1], $this->clang);
      $content = str_replace($match[0],$url,$content);
    }


habe daher eine Testseite erstellt die nur das obige macht:

Code: Alles auswählen
   <?php
   $content = 'Dies ist ein test redaxo://2 und noch einer redaxo://25 und noch einer redaxo://36';
   echo $content.'<br><hr><br>';
   
    preg_match_all('/redaxo:\/\/([0-9]*)\/?/im',$content,$matches,PREG_SET_ORDER);
    foreach($matches as $match)
    {
   
      if(empty($match)) continue;

echo 'match[0]: '.$match[0].' <br>';
echo 'match[1]: '.$match[1].' <br>';
echo 'match[1][0]: '.$match[1][0].' <br>';
echo 'match[1][1]: '.$match[1][1].' ENDE eines Durchgangs<br><br>';


      $url = '<b>('.$match[1].')</b>';
      $content = str_replace($match[0],$url,$content); //hier
    }

    echo '<hr>'.$content;
   
   ?>


als Ergebnis bekomme ich folgendes: http://netsh70754.dbdserver.de/test.php

Liegt es denn wirklich an der der regex Lib?
So wie es für mich aussieht ersetzt er beim ersten Auffinden von redaxo://2 den ersten Link durch "$content = str_replace($match[0],$url,$content)" und dabei gleichzeitig auch redaxo://25, da hier ja auch redaxo://2 drin vorkommt, was zu dieser Zeit $match[0] entspricht??

war das verständlich?

würde mich freuen, wenn mich jemand aufklären kann?
Benutzeravatar
Stefan Brinkers
 
Beiträge: 13
Registriert: 4. Dez 2007, 15:11
Wohnort: Oldenburg

Beitragvon Stefan Brinkers » 10. Dez 2007, 16:32

edit2:
so, ich umgehe das Problem nun mit preg_replace statt str_replace und einer Limitierung von 1. Das heißt nur das erste Vorkommen wird ersetzt. Funktioniert zwar, aber warum das bei euch ohne Probleme läuft versetehe ich noch nicht.
Benutzeravatar
Stefan Brinkers
 
Beiträge: 13
Registriert: 4. Dez 2007, 15:11
Wohnort: Oldenburg

Beitragvon Michael83 » 10. Dez 2007, 17:46

Hi,

ich habe genau das gleiche Problem, ebenfalls unter PHP 5.2.5. Bei mir sind es links zu den IDs 3 und 33, wobei der zweite Link auf die URL 3-0-name.html3 verweist.

Ich denke auch, dass es sich um einen Bug in REDAXO handelt, da die obige Erklärung einleuchtend ist.

Leider kenne ich mich mit regulären Audrücken kaum aus. Gibt es dort eine Möglichkeit den Ausdruck so anzupassen, dass die Zahlenfolge immer bis zum letzten Zeichen ausgewertet werden muss?
Gruß,
Michael
Benutzeravatar
Michael83
 
Beiträge: 189
Registriert: 22. Aug 2006, 15:59
Wohnort: Reichshof

Beitragvon n.ruediger » 10. Dez 2007, 21:20

Hallo,

das Problem ist (leider) nicht der reguläre Ausdruck (zumindext nicht allein, sondern das str_replace, dass die Adresse ersetzten soll. Dieses schaut nämlich nur bis an das Ende des zu ersetzenden Strings und nicht über den Tellerrand hinaus.

Ich habe die Funktion jetzt angepasst, so dass der reguläre Ausdruck noch ein Zeichen nach dem Link mit aufnimmt und ersetzt.

Hier die "neue" Funktion:

Code: Alles auswählen
function replaceLinks($content)
  {
    global $REX;

    // -- preg match redaxo://[ARTICLEID]-[CLANG] --
    preg_match_all('/redaxo:\/\/([0-9]*)\-([0-9]*)\/?(.){1}/im',$content,$matches,PREG_SET_ORDER);
    foreach($matches as $match)
    {
      if(empty($match)) continue;

      $url = rex_getURL($match[1], $match[2]);
      $content = str_replace($match[0],$url.$match[2],$content);
    }

    // -- preg match redaxo://[ARTICLEID] --
    preg_match_all('/redaxo:\/\/([0-9]*)\/?(.){1}/im',$content,$matches,PREG_SET_ORDER);
    foreach($matches as $match)
    {
      if(empty($match)) continue;

      $url = rex_getURL($match[1], $this->clang);
      $content = str_replace($match[0],$url.$match[2],$content);
    }

    return $content;
  }


Wäre lieb, wenn ihr schreiben könntet, ob das bei euch auch hilft.

@ Markus: Vielleicht in der SVN-Version ändern?!

Liebe Grüße,
Nicole
Benutzeravatar
n.ruediger
 
Beiträge: 418
Registriert: 21. Mär 2007, 11:25
Wohnort: Frankfurt (Oder)

Beitragvon Michael83 » 10. Dez 2007, 21:25

Hi,

danke dir! Ich habe die Funktion ersetzt, den Cache gelöscht und es funktioniert. :D
Gruß,
Michael
Benutzeravatar
Michael83
 
Beiträge: 189
Registriert: 22. Aug 2006, 15:59
Wohnort: Reichshof

Beitragvon n.ruediger » 10. Dez 2007, 21:26

Wow bist du schnell ;-)
Benutzeravatar
n.ruediger
 
Beiträge: 418
Registriert: 21. Mär 2007, 11:25
Wohnort: Frankfurt (Oder)

Nächste

Zurück zu Bugs [R4]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast