Hi!
var_dump( preg_split('/((^\p{P}+)|(\p{P}*\s+\p{P}*)|(\p{P}+$))/',html_entity_decode($text, ENT_NOQUOTES),-1, PREG_SPLIT_NO_EMPTY) );
Die Ursache kann sein, dass du zwar mit \p{..} nach Unicode-Zeichen Ausschau hältst, aber den UTF-8-Modifizierer u nicht verwendest. Mit diesen jedenfalls läuft preg_split() bei mir ohne Probleme, auch wenn dem html_entity_decode() nicht gesagt wird, dass es UTF-8 liefern soll.
Warum hast du überhaupt mit Entitys zu tun, wenn du UTF-8 verwendest?
Lo!