Tout d'abord, PHP considère dorénavant par défaut que les données envoyées à un navigateur web sont encodées en UTF-8.

La valeur par défaut de la directive default_charset est en effet passée de iso-8859-1 à UTF-8.

Attention cependant, cela ne veut pour autant pas dire que PHP encode automatiquement et de manière transparente les données envoyées à un client HTTP en UTF-8.

La responsabilité de cet encodage reste entièrement à la charge du développeur, aussi bien au niveau de son code source qu'au niveau de ses fichiers de ressources ou de sa base de données.

D'ailleurs, pour ceux qui se poserait la question, le support de l'Unicode n'a pas été amélioré par PHP 5.4 et il faut donc toujours recourir aux outils traditionnels du langage pour travailler dans un encodage de caractères autre que l'iso-8859-1, comme mbstring ou intl.

Une directive de configuration nommée zend.multibyte a bien fait son apparition avec PHP 5.4, mais elle ne fait que remplacer la directive de compilation --enable-zend-multibyte et ne permet que d'activer la détection de l'encodage des fichiers analysés par le Zend Engine via leur BOM, et de plus uniquement si l'extension mbstring est disponible.

Il en va de même pour la nouvelle directive zend.script_encoding, qui permet de définir l'encodage d'un script PHP, en complément de la possibilité apparue avec PHP 5.3 de le définir via la directive declare().

En conclusion, si PHP 5.4 a été développé suite à l'abandon du développement de PHP 6, dont le principal apport devait être le support natif d'Unicode, il ne fait pas fonctionnellement mieux que PHP 5.3 sur ce point, même si quelques directives permettent de l'intégrer un peu plus fortement.