Guten Morgen,
ich möchte über einen Link im Standard-Webfrontend ein bzw. zwei Kommando(s) ausführen. Der Link wird wie folgt zusammengebaut:
my $callMe='<a href="/fhem?cmd=set '.$name;
if($state eq 'disabled') {
$callMe .=' enable ';
$cmd =$callMe.'">Enable</a>';
} else {
$callMe .=' disable ;defmod at_AdGuard_enable at +00:';
$cmd = $callMe.'01:00 set '.$name.' enable">1</a>';
Daraus wird richtigerweise
<a href="/fhem?cmd=set adguard disable ;defmod at_AdGuard_enable at +00:01:00 set adguard enable">1</a>
laut Seitenquelltext generiert. Rufe ich diesen Link nun auf, wird das Plus-Zeichen allerdings verschluckt und in der Folge kein relatives at sondern ein absolutes at angelegt.
Was mache ich falsch?
Url-Encoding der Zeile fehlt.
Ich würde versuchen, das "+" durch "+" zu ersetzen und testen, ob das schon ausreicht.
Hat eigentlich das Leerzeichen in "disable ;defmod" irgendeine Bedeutung? Das mag zwar funktionieren, sieht aber unüblich aus.
Danke, mit dem Hinweis hat es ausgereicht, die Zeile
$callMe .=' disable ;defmod at_AdGuard_enable at +00:';
durch
$callMe .= urlEncode(' disable ;defmod at_AdGuard_enable at +00:');
zu ersetzen.
@Betateilchen:
Zitat
Ich würde versuchen, das "+" durch "+" zu ersetzen und testen, ob das schon ausreicht.
Das hatte ich probiert, es hatte nicht gereicht/geholfen. Nein, das Leerzeichen ist ein Überbleibsel.
Zitat von: betateilchen am 05 März 2023, 12:05:38
Ich würde versuchen, das "+" durch "+" zu ersetzen und testen, ob das schon ausreicht.
"+" ist HTML Encoding. URL Encoding ist "%2B".