Какой лучше substr или mb_substr?
Это очень плохой вопрос.
Ты даже не спрашиваешь, в чем разница между этими двумя функциями, не говоря уже о том, чтобы понять самому что они делают, и сделать вывод самостоятельно на основе полученной информации. 

Тебя интересует только бинарный ответ - да или нет. 
Сразу должен тебя расстроить - на бинарных ответах (и в целом на ответах на вопрос "как", а не "почему") далеко не уедешь. Программирование - слишком сложная наука. Если тебя интересуют такие ответы, то лучше пойти подавальщиком в макдональдс. Там на все вопросы есть четкий ответ. 

Если же ты хочешь продолжать заниматься программированием, то придется учиться учиться. И делать выводы самостоятельно. И задавать "хорошие" вопросы, вида "я тут поразмыслил и решил что substr нужно применять в таких случаях, mb_substr - в таких" или "я тут подумал, что действительно лучше всегда применять  mb_substr, потому что - (...приводишь свою аргументацию...). Я прав?"
В описании самой функции есть подробности для чего она (она не съедает символы): https://www.php.net/manual/ru/function.mb-substr.php

Наглядно это выглядит так:
консоль