Лучшая функция для капитуляции заголовков?

Должен ли я использовать mb_convert_case с MB_CASE_TITLE или ucwords ? Или что-то другое? В чем будут отличия?

Это зависит.

mb_convert_case() является многобайтовым. ucwords() – нет.

mb_convert_case() требуется расширение, которое не всегда доступно. ucwords() всегда доступно.

Поэтому, если ваше приложение будет использовать только однобайтовые кодировки, тогда ucwords() даст вам лучшую переносимость.

Но если вашему приложению может потребоваться обработать многобайтовые кодировки, тогда ucwords() приведет к отказу.

 function uc_words($string){ return mb_convert_case($string, MB_CASE_TITLE, "UTF-8"); } 

MB означает многобайтный байт, поэтому он может преобразовывать символы, отличные от ASCII, ucwords может преобразовывать только ASCII.

Если вы используете ucwords на «moj šal», вы получите «Moj šal», если вы используете многобайтовый конверт, вы получите «Moj Šal» … вот и все.