php is over de jaren heen wel veel matuurder en strikt geworden (een heel verschil tov php3, waar ik destijds mee begonnen ben)
in principe doet (deed?) php implicit type casting (het gaat het type van je variable bepalen adhv de inhoud ervan)
bv als je zegt x = 1 dan zal php dat als int zien, je hoeft niet (int) x = 1 te doen.
ik weet niet of dat ooit van toepassing was tussen array & string conversies, gezien ik nooit in die situatie gezeten heb (zorgde altijd dat de waarde van het juiste type was voor ik het ergens aan doorspeelde)
misschien dat "type juggling", "type casting" en "implicit casting" je verder op weg kunnen helpen met je zoektocht.
onthou wel ook dat php snel evolueert in versies, en hoewel je ondertussen best minimaal op php 8.2 kan zitten, zitten er nog tal van hostings op een php7x versie (of zelfs lager....)
edit:
volgens chatgpt zou het gedrag van htmlspecialchars in 7 & 8 gelijk gebleven zijn (zoals ik dacht):
In both PHP 7 and PHP 8, passing an array to htmlspecialchars() results in a warning being generated and the function returning NULL. It's important to pass a string to this function, not an array.
mogelijks zit er dus ergens een andere functie in de code die de vertaling voorheen deed en nu niet meer (correct) werkt.