What triggers the bug: explode('|', …) on a trailing pipe yields ["page", ""], array_shift leaves [""] — a non-empty array holding an empty string, so if ($replacers) passes and concatenates Array. The malformed markup was the trigger all along.
So the repair is just to delete |Array. Let me find every other include carrying the same time bomb:
Found all malformed includes that will corrupt on move
Complete picture now, and it's clean to fix.
No include anywhere uses a genuine replacer. Every | in your 218 includes is a malformed empty one — someone half-typed a link. So the repair is pure deletion, nothing to reconstruct.
sudo sed -i "364s/.*/ if (\$replacers) \$result .= '|' . implode('|', \$replacers);/" \
/var/www/dokuwiki/lib/plugins/include/action.php
php -l /var/www/dokuwiki/lib/plugins/include/action.php
What triggers the bug: explode('|', …) on a trailing pipe yields ["page", ""], array_shift leaves [""] — a non-empty array holding an empty string, so if ($replacers) passes and concatenates Array. The malformed markup was the trigger all along.
So the repair is just to delete |Array. Let me find every other include carrying the same time bomb:
Found all malformed includes that will corrupt on move
Complete picture now, and it's clean to fix.
No include anywhere uses a genuine replacer. Every | in your 218 includes is a malformed empty one — someone half-typed a link. So the repair is pure deletion, nothing to reconstruct.