problem mit cString::iReplaceOnceReverse
Verfasst: Mi 7. Feb 2024, 14:38
hmm... hatte jetzt den merkwürdigen fall das in der
includes.con_editcontent.php wo dieses cString::iReplaceOnceReverse
eingesetzt wird den fall, dass der code der vor </body> gesetzt werden soll folgendes generiert hat
habs derzeit mit einem str_replace workaround behoben...
wenn das eintritt kann man nicht in den tiny wechseln oder speichern... eh cool...
aber wenn ich mir die beiden funktionen der klasse ansehe stimmt irgendwas daran nicht...
entweder verzählt sich das teil irgendwo oder durch die toLowerCase krachts...
mit folgendem code habe ich das selbe problem
includes.con_editcontent.php wo dieses cString::iReplaceOnceReverse
eingesetzt wird den fall, dass der code der vor </body> gesetzt werden soll folgendes generiert hat
Code: Alles auswählen
</bo<form name="editcontent" method="post" action="https://XXX.XXX.XX/contenido/external/backendedit/front_content.php?contenido=15f39f1a876b7ed255eb3472ff1939e6&area=con_editcontent&idart=327&idcat=8&lang=1&client=1"><input name="action" type="hidden" value="20"><input name="changeview" type="hidden" value="edit"><input name="idArtLangVersion" type="hidden" value=""><input name="copyTo" type="hidden" value=""><input name="data" type="hidden" value=""></form>
</body>tml>
wenn das eintritt kann man nicht in den tiny wechseln oder speichern... eh cool...
aber wenn ich mir die beiden funktionen der klasse ansehe stimmt irgendwas daran nicht...
Code: Alles auswählen
$code = cString::iReplaceOnceReverse("</body>", "$contentForms</body>", $code);
Code: Alles auswählen
public static function iReplaceOnceReverse($find, $replace, $subject) {
$start = self::posReverse(parent::toLowerCase($subject), parent::toLowerCase($find));
if ($start === false) {
return $subject;
}
$end = $start + parent::getStringLength($find);
$first = parent::getPartOfString($subject, 0, $start);
$last = parent::getPartOfString($subject, $end, parent::getStringLength($subject) - $end);
$result = $first . $replace . $last;
return $result;
}
public static function posReverse($haystack, $needle, $start = 0) {
$tempPos = parent::findFirstPos($haystack, $needle, $start);
if ($tempPos === false) {
if ($start == 0) {
// Needle not in string at all
return false;
} else {
// No more occurances found
return $start - parent::getStringLength($needle);
}
} else {
// Find the next occurance
return self::posReverse($haystack, $needle, $tempPos + parent::getStringLength($needle));
}
}
Code: Alles auswählen
$code = cString::iReplaceOnce("</body>", "$contentForms</body>", $code);
Code: Alles auswählen
public static function iReplaceOnce($find, $replace, $subject) {
$start = parent::findFirstPos(parent::toLowerCase($subject), parent::toLowerCase($find));
if ($start === false) {
return $subject;
}
$end = $start + parent::getStringLength($find);
$first = parent::getPartOfString($subject, 0, $start);
$last = parent::getPartOfString($subject, $end, parent::getStringLength($subject) - $end);
$result = $first . $replace . $last;
return $result;
}