Dein Ansatz müsste funktionieren - testen, ob dem relativen Pfad ein / folgt. Aber: Wir sollten sicherstellen, dass ein '/~john/serendipity//'... nicht nicht ersetzt wird. Solche URLs passieren relativ häufig und sollten normalerweise problemlos aufgelöst werden.
Im Grunde können wir das alles vereinfachen, oder?
Wir wollen, dass relative Pfade mit absoluten ersetzt werden, nur dann nicht, wenn der relative Pfad / ist und ihm ein / folgt. Dafür brauchen wir zwei verschiedene Pattern.
Also:
Code: Select all
if ($serendipityHttpPath == /) {
pattern = 'href|src=["\'](/)([^/][^"\']*)'
} else {
pattern = "href|src=[\"']($serendipityHttpPath)[^\"']*)"
}
Bei der Gelegenheit hab ich die regexp soweit mir möglich vereinfach. Wobei man das wohl wieder erweitern muss, um das wirklich nur in Links zu machen und den Rest des Links einzusetzen.
Meine Testfälle:
1,
2,
3,
4
Zu dem Attributfehler: Wenn da der Atomparser sich beschwert machen wir wahrscheinlich das escapen falsch. Das HTML des Eintrags ist ja kein valides xhtml und sollte daher mit <![CDATA[ ... ]] maskiert werden.