Задача
Требуется заменить подстроку другой строкой. Например, перед тем как напечатать номер кредитной карты, вы хотите скрыть все цифры ее номера, за исключением последних четырех.
Решение
Используйте функцию substr_replace():
// Все, начиная с позиции $start до конца строки $old_string,
// заносится в $new_substring
$new_string = substr_replace($old_string,$new_substring,$start);
// $length символов, начиная с позиции $start, заменяются на $new_substring
$new_string = substr_replace($old_string,$new_substring,$start,$length);
Обсуждение
Без аргумента $length, функция substr_replace() заменяет все, начиная с позиции $start до конца строки. Если значение $length определено, то замещается только это количество:
print substr_replace('My pet is a blue dog.','fish.',12);
print substr_replace('My pet is a blue dog.','green',12,4);
$credit_card = '4111 1111 1111 1111';
print substr_replace($credit_card,'xxxx ',0,strlen($credit_card)-4);
My pet is a fish.
My pet is a green dog.
xxxx 1111
Если число $start отрицательное, то новая подстрока помещается в позицию $start, считая от конца строки $old_string, а не с начала:
print substr_replace('My pet is a blue dog.','fish.',-9);
print substr_replace('My pet is a blue dog.','green',-9,4);
My pet is a fish.
My pet is a green dog.
Если $start и $length равны 0, то новая подстрока вставляется в начало $old_string:
print substr_replace('My pet is a blue dog.','Title: ',0,0);
Title: My pet is a blue dog.
Функция substr_replace() удобна, когда текст невозможно отобразить за один раз, и вы хотите показать его часть со ссылкой на остальное содержание. Например, следующее выражение отображает 25 строк текста с многоточием в качестве ссылки на страницу с продолжением:
$r = mysql_query("SELECT id,message FROM messages WHERE id = $id") or die();
$ob = mysql_fetch_object($r);
printf('<a href="more-text.php?id=%d">%s</a> ',
$ob->id, substr_replace($ob->message,' ...',25));
См. также Документацию по функции substr_replace() на http://www.php.net/sub-str-replace.