Links to pages on commons.wikimedia.org don't work (General)

by L.Willms, Wednesday, January 28, 2015, 07:26 (3375 days ago)

Apparently, MLF ignores the [link= if the target is the main page of some image on commons.wikimedia.org and the file extension is JPG.

It works, when the link goes directly to one of the actual image files in their various resolutions, which are linked to on upload.wikimedia.org

See this example in my message
http://www.ice-treff.de/index.php?id=331534
and the workaround in the reply by user "Henrik"

Avatar

Links to pages on commons.wikimedia.org don't work

by Micha ⌂, Wednesday, January 28, 2015, 07:39 (3375 days ago) @ L.Willms

Hi,

Apparently, MLF ignores the [link= if the target is the main page of some image on commons.wikimedia.org and the file extension is JPG.

The problem is the : character inside the URI. If you escape this character, it works e.g.

https://commons.wikimedia.org/wiki/File%3ASchloss_Ehrenhausen.jpg

regards
Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Links to pages on commons.wikimedia.org don't work

by L.Willms, Wednesday, January 28, 2015, 14:53 (3375 days ago) @ Micha

Achsoooo ... thanks for pointing out the problem.

Avatar

Links to pages on commons.wikimedia.org don't work

by Auge ⌂, Wednesday, January 28, 2015, 21:18 (3375 days ago) @ Micha

Hallo

Apparently, MLF ignores the [link= if the target is the main page of some image on commons.wikimedia.org and the file extension is JPG.


The problem is the : character inside the URI. If you escape this character, it works e.g.

Mal 'ne blöde Frage. Für PHP gibt es ja parse_url, um den Querystring zu ermitteln und urlencode für die Maskierung in den Querystrings. Gibt es in JavaScript vergleichbare Funktionen, mit denen man die Funktion zur Erstellung der Links aufbohren kann?

Tschö, Auge

--
Trenne niemals Müll, denn er hat nur eine Silbe!

Links to pages on commons.wikimedia.org don't work

by L.Willms, Wednesday, January 28, 2015, 22:03 (3375 days ago) @ Auge

Mal 'ne blöde Frage.

Es gibt keine blöden Fragen, nur blöde Antworten.

Für PHP gibt es ja parse_url, um den Querystring zu ermitteln und urlencode für die Maskierung in den Querystrings. Gibt es in JavaScript vergleichbare Funktionen, mit denen man die Funktion zur Erstellung der Links aufbohren kann?

Ja, es gibt diese vier globalen Funktionen:

encodeURI()
encodeURIComponent() (nur ein Teilstring eines URI)

und die Gegenstücke

decodeURI()
decodeURIComponent()

Um z.B. den innerhalb des Querystrings enthaltenen Doppelpunkt zu codieren, sollte man die "component"-Variante der Funktionen wählen, weil der Doppelpunkt ja legal ist als Trenner zwischen Protokoll und Domainname und deswegen bei der Standardversion eben nicht codiert wird.

Javascript encodeURI, encodeURIComponent

by L.Willms, Thursday, January 29, 2015, 05:02 (3375 days ago) @ L.Willms

Die Zeichen

- _ . ! ~ + ' ( ) 

bleiben bei beiden Versionen unverändert, und URIencode läßt auch diese unangetastet:

 ; / ? : @ & = + $ , # 

weil die ja hier und da im URI eine syntaktische Bedeutung haben. Um diese zweite Gruppe zu maskieren, nimmt man encodeURIComponent für einen syntaktisch abgegrenzten Teil eines URI.

Avatar

Links to pages on commons.wikimedia.org don't work

by Micha ⌂, Thursday, January 29, 2015, 08:25 (3374 days ago) @ Auge

Hi,

Gibt es in JavaScript vergleichbare Funktionen, mit denen man die Funktion zur Erstellung der Links aufbohren kann?

Die Funktionen hat Dir L.Willms genannt. Anwendbar sind sie hier mMn. nicht, wenn die URI nicht zerlegt werden soll. Auf die gesamte URI ist de/encodeURI anzuwenden, und das ignoriert den Doppelpunkt. Um de/encodeURIComponent zu nutzen, müsste man die Adresse zerlegen und später wieder zusammenbauen.

Bleibt weiter die Frage, was passiert, wenn der Doppelpunkt bereits maskiert wurde? Dann würde eine weitere Maskierung die URI unbrauchbar machen, vgl.

: --> %3A --> %253A

Gruß Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Avatar

Links to pages on commons.wikimedia.org don't work

by Auge ⌂, Sunday, February 01, 2015, 21:46 (3371 days ago) @ Micha

Hallo

Gibt es in JavaScript vergleichbare Funktionen, mit denen man die Funktion zur Erstellung der Links aufbohren kann?


Die Funktionen hat Dir L.Willms genannt. Anwendbar sind sie hier mMn. nicht, wenn die URI nicht zerlegt werden soll. Auf die gesamte URI ist de/encodeURI anzuwenden, und das ignoriert den Doppelpunkt. Um de/encodeURIComponent zu nutzen, müsste man die Adresse zerlegen und später wieder zusammenbauen.

Deswegen habe ich explizit auch nach einem Gegenstück zu parse_url gefragt. Die Funktion zerlegt bei PHP die URL fachgerecht. Und ja, die URL wäre zu zerlegen. Andererseits entginge man genau so dem Problem, mit dem dieser Thread begonnen hat.

Bleibt weiter die Frage, was passiert, wenn der Doppelpunkt bereits maskiert wurde? Dann würde eine weitere Maskierung die URI unbrauchbar machen, vgl.

: --> %3A --> %253A

Diese Gefahr ist nicht JavaScript-spezifisch.

Tschö, Auge

--
Trenne niemals Müll, denn er hat nur eine Silbe!

Links to pages on commons.wikimedia.org don't work

by L.Willms, Sunday, February 01, 2015, 22:18 (3371 days ago) @ Auge

Auf die gesamte URI ist de/encodeURI anzuwenden, und das ignoriert den Doppelpunkt. Um de/encodeURIComponent zu nutzen, müsste man die Adresse zerlegen und später wieder zusammenbauen.

Deswegen habe ich explizit auch nach einem Gegenstück zu parse_url gefragt. Die Funktion zerlegt bei PHP die URL fachgerecht. Und ja, die URL wäre zu zerlegen.

Dazu hilft in Javascript die Methode String.split(delimiter, limit)
wobei String ein String-Objekt ist, und delimiter auch ein Musterausdruck ("regular expression") sein kann.

String.split gibt einen array von strings zurück, wobei die Länge des arrays durch limit begrenzt werden kann.

Vermutlich kann man einen Musterausdruck formulieren, beim dem nur das jeweils erste Vorkommen eines Separators ausgewertet wird. Aber davon verstehe ich zuwenig.

Avatar

Links to pages on commons.wikimedia.org don't work

by Micha ⌂, Monday, February 02, 2015, 07:33 (3370 days ago) @ Auge

Hi,

Deswegen habe ich explizit auch nach einem Gegenstück zu parse_url gefragt.

Okay, dann gibt es keine. Es existieren aber Nachbauten der Funktion. Für mich stellt sich die Frage, ob man das Problem nicht besser auf PHP Seite löst. Das JS arbeitet soweit korrekt. Warum akzeptiert der BB-Parser die URL nicht?

Diese Gefahr ist nicht JavaScript-spezifisch.

Aber durch eine Implementierung u U entstehen.


Gruß Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Avatar

Links to pages on commons.wikimedia.org don't work

by Auge ⌂, Tuesday, February 03, 2015, 10:02 (3369 days ago) @ Micha
edited by Auge, Monday, May 11, 2015, 11:14

Hallo Milo

Deswegen habe ich explizit auch nach einem Gegenstück zu parse_url gefragt.


Okay, dann gibt es keine. Es existieren aber Nachbauten der Funktion. Für mich stellt sich die Frage, ob man das Problem nicht besser auf PHP Seite löst.

Die Frage ist für mich, welche ist die richtige Seite.

Soll ein Querystring schon beim erzeugen des BB-Codes maskiert werden? Schließlich lässt sich die URL bei jeglicher hier gängiger Ausgabe (HTML, RSS) nur maskiert verwenden. Dann ist (bei der Eingabe) JS die richtige Seite.

Soll die URL hingegen roh und unmaskiert in der Datenbank stehen, heißt das im Umkehrschluss, dass sie bei der Ausgabe kontextgerecht (auch wenn es hier nur einen solchen gibt) maskiert werden muss. Dann ist PHP die richtige Seite.

Je länger ich darüber nachdenke, umso sinnvoller erscheint mir der Weg, erst die Ausgabe zu manipulieren. Also ist PHP am Zug, wobei der Vorteil besteht, dass dort definitiv alle notwendigen Funktionen standardmäßig zur Verfügung stehen.

Warum akzeptiert der BB-Parser die URL nicht?

Macht er doch. Es hat offensichtlich nur keiner daran gedacht, den Querystring gesondert zu behandeln.

Diese Gefahr ist nicht JavaScript-spezifisch.


Aber durch eine Implementierung u U entstehen.

Natürlich. Wenn wir die Aufgabe zu PHP verlegen, besteht genau die gleiche Gefahr. :-)

Tschö, Auge

--
Trenne niemals Müll, denn er hat nur eine Silbe!

Avatar

Links to pages on commons.wikimedia.org don't work

by Micha ⌂, Tuesday, February 03, 2015, 17:29 (3369 days ago) @ Auge

Hi Auge,

Warum akzeptiert der BB-Parser die URL nicht?

Macht er doch. Es hat offensichtlich nur keiner daran gedacht, den Querystring gesondert zu behandeln.

Nein, er ignoriert die URL und fügt keinen Link (a-Element) ein:
https://commons.wikimedia.org/wiki/File:Schloss_Ehrenhausen.jpg

Die Lösung über parse_url in JS hilft hier auch nur bedingt, da das Problem ja nicht im Query, sondern bereits im Pfad beginnt und encodeURIComponent auch die Zeichen / und ? kodieren würde (neben dem :).

Gruß Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Avatar

contains_invalid_string - Funktion macht Probleme

by Micha ⌂, Tuesday, February 03, 2015, 18:35 (3369 days ago) @ Auge
edited by Micha, Tuesday, February 03, 2015, 18:43

Hi,

ich habe die Ursache gefunden. In der Hilfsfunktion contains_invalid_string wird die URL geprüft und abgelehnt. Leider passiert dies nicht auf der Grundlage, die sich Alex damals überlegt hatte, sondern eher durch Zufall. Die Funktion durchsucht die URL nach bösen[tm] Zeichenketten und lehnt diese dann u.U. ab. Konkret ist hier die Suche nach dem Substring file: das Problem, welches zufällig in der URL steht. Vermutlich wollte Alex verhindern, dass einer auf eine lokale Quelle referenziert und einen Link setzt - dies deutet zumindest der auskommentierte Part der Funktion an.

Um das Problem zu lösen, würde hier also das Entfernen von file: aus genannter Funktion reichen - dann wäre aber auch Intention hinter dem Verbot weg. Wenn es nur um das "Protokoll" file:// geht, könnte man ggf. einfach die Schrägstriche noch mit aufnehmen und hätte - sofern ich nichts übersehen habe - für beide Fälle eine Lösung.

Vielleicht sollte man es für die Wörter am Anfang auch mit einem regulären Ausdruck regeln. Etwas wie ^(javascript|file|data|jar)\: könnte da bereits helfen in Verbindung mit preg_match.

Gruß Micha


functions.inc.php

/**
 * help function for is_valid_url() and is_valid_email()
 *
 * @param string $string
 * @return bool
 */
function contains_invalid_string($string)
 {
  $invalid_strings = array('<','>','\'','"','data:','file:','javascript:','jar:','expression(');
  foreach($invalid_strings as $invalid_string)
   {
    if(strpos(strtolower($string), $invalid_string)!==false)
     {
      return true;
     }
   }
  #if(substr($string, 0, 5) == 'data:' || substr ($string, 0, 5) == 'file:' || substr ($string, 0, 11) == 'javascript:' || substr ($string, 0, 4) == 'jar:')
  # {
  #  return false;
  # }
  return false;
 } 

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

contains_invalid_string - Funktion macht Probleme

by L.Willms, Wednesday, February 04, 2015, 06:31 (3368 days ago) @ Micha

Vielleicht sollte man es für die Wörter am Anfang auch mit einem regulären Ausdruck regeln. Etwas wie ^(javascript|file|data|jar)\: könnte da bereits helfen in Verbindung mit preg_match.

Nicht nur vielleicht... so wird ja nur das Protokoll am Anfang des Strings gefunden (den Accent Circonflex (^) am Anfang hatte ich erst nicht richtig verstanden).

Avatar

contains_invalid_string - Funktion macht Probleme

by Micha ⌂, Wednesday, February 04, 2015, 07:22 (3368 days ago) @ L.Willms

Hi,

Nicht nur vielleicht...

Alex soll sich das am Besten ansehen. Wenn mein Vorschlag akzeptabel ist, kann er diesen verwenden. Sollte ich etwas übersehen haben, muss er halt nacharbeiten.

Wenn Du schnell eine Lösung benötigst, kannst Du den beschriebenen Ansatz erst einmal selbst einbauen und musst nicht bis zum Update warten.


Schöne Grüße Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

contains_invalid_string - Funktion macht Probleme

by L.Willms, Wednesday, February 04, 2015, 11:54 (3368 days ago) @ Micha

Ich selber betreibe ja kein Forum ... ich bin da nur User.

Wie kriegt man eigentlich raus, welche Softwareversion da eingesetzt ist?

Avatar

contains_invalid_string - Funktion macht Probleme

by Micha ⌂, Wednesday, February 04, 2015, 12:16 (3368 days ago) @ L.Willms
edited by Micha, Wednesday, February 04, 2015, 13:05

Hi,

die Version steht in den META Tags des Forums.

<meta name="generator" content="my little forum 2.3.3" />

Grüße Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Merci vielmals!

by L.Willms, Thursday, February 05, 2015, 15:43 (3367 days ago) @ Micha

- No text -

Avatar

Merci vielmals!

by Micha ⌂, Wednesday, February 11, 2015, 13:10 (3361 days ago) @ L.Willms

Hi,

in der neuen Version hat Alex den Bug behoben!

Gruß Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

RSS Feed of thread