Как вставить символ табуляции в строку?

190
16 июля 2018, 14:40

Так добавляет в текст символ вопроса в черном вертикальном ромбике :

$s = 'Просто текст';
$str[4] = "\t"; 

Кодировка Utf-8

Answer 1

Делается это так. Вначале с помощью mb_str_split() преобразуете строку в массив. Делаете его копию. После этого с каждым массивом делаете срез по нужной позиции с помощью array_slice() (один до, другой после). В конце объединяете массивы, а между ними свой нужный фрагмент текста. В конце результат преобразовываете в строку с помощью implode().

Проблема, как раньше заметили из-за юникода, поэтому приходится идти на ухищрения.

Answer 2

С мультибайтными кодировками нельзя работать по прямым индексам - Вы адресуете не символы, а байты.

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"; // И пр   осто текст

Демонстрация

READ ALSO
суммирование времени PHP

суммирование времени PHP

Есть функция которая суммирует время, ответ выдает в формате "H:i:s", как сделать чтоб часы могли переваливать за 24 ?

163
вставить запись в базу или обновить существующую строку

вставить запись в базу или обновить существующую строку

Прошу помощи, делаю импорт из csv в mysqlНаписал импорт, но столкнулся с тем что будут обновлятся 3 таблицы постоянно и не знаю как правильно написать...

212
Не корректный заголовок User-Agent

Не корректный заголовок User-Agent

Собрал слайдер, в котором есть условие проверки заголовка User-Agent и в зависимости мобильный это или нет отдавать нужную картинкуПочему на некоторых...

165
Как исправить ошибку в цикле foreach, PHP?

Как исправить ошибку в цикле foreach, PHP?

Хотя сайт работает нормально, в логах сервера регулярно появляется ошибка:

196