Так добавляет в текст символ вопроса в черном вертикальном ромбике :
$s = 'Просто текст';
$str[4] = "\t";
Кодировка Utf-8
Делается это так. Вначале с помощью mb_str_split() преобразуете строку в массив. Делаете его копию. После этого с каждым массивом делаете срез по нужной позиции с помощью array_slice() (один до, другой после). В конце объединяете массивы, а между ними свой нужный фрагмент текста. В конце результат преобразовываете в строку с помощью implode().
Проблема, как раньше заметили из-за юникода, поэтому приходится идти на ухищрения.
С мультибайтными кодировками нельзя работать по прямым индексам - Вы адресуете не символы, а байты.
function replaceStrAt($str, $substr, $from, $to = null){
is_null($to) and $to = $from;
return mb_substr($str, 0, $from) . $substr . mb_substr($str, $to + 1);
}
function insertSubstrInto($str, $substr, $index){
return mb_substr($str, 0, $index) . $substr . mb_substr($str, $index);
}
$s = 'И просто текст';
echo replaceStrAt($s, "\t", 4), "\n"; // И пр сто текст
echo insertSubstrInto($s, "\t", 4), "\n"; // И пр осто текст
Демонстрация
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости