substr_replace()
La funzione substr_replace() in PHP sostituisce una parte di una stringa con un'altra stringa in base alla posizione numerica.
Introduzione
La funzione substr_replace() sostituisce una parte di una stringa con un'altra stringa, basandosi su una posizione numerica anziché su un pattern di ricerca. Si indica dove iniziare e quanti caratteri sovrascrivere, e la funzione inserisce il testo sostitutivo al posto indicato. Questo la rende ideale per modifiche in posizioni fisse — mascherare le cifre di una carta di credito, sostituire una porzione di una data o inserire testo a un offset noto.
Questa funzione è diversa da str_replace(), che trova e sostituisce cercando una sottostringa. Usa substr_replace() quando conosci la posizione; usa str_replace() quando conosci il valore.
Sintassi
substr_replace(
array|string $string,
array|string $replace,
array|int $offset,
array|int|null $length = null
): string|array| Parametro | Descrizione |
|---|---|
$string | La stringa di input (o un array di stringhe — vedi Utilizzo con array). |
$replace | La stringa sostitutiva inserita a partire da $offset. |
$offset | Il punto di inizio della sostituzione. Un valore negativo conta dalla fine della stringa. |
$length | Quanti caratteri sovrascrivere. Omettilo (o passa null) per sostituire fino alla fine della stringa. Un valore negativo si ferma a quel numero di caratteri prima della fine. 0 inserisce senza eliminare nulla. |
La funzione restituisce la stringa risultante. Non modifica $string in-place — devi catturare il valore restituito.
Esempio base
A partire dall'indice 7 (w), vengono rimossi cinque caratteri e al loro posto viene inserito "universe".
Inserimento senza eliminazione
Passa 0 come lunghezza e non viene rimosso nulla — il testo sostitutivo viene semplicemente inserito prima dell'offset.
<?php
echo substr_replace("Hello", "ABC", 2, 0); // HeABClloSostituzione da un offset negativo
Un $offset negativo conta all'indietro dalla fine della stringa, il che è utile quando non si conosce in anticipo la lunghezza.
<?php
echo substr_replace("Hello", "X", -1); // HellX (replace the last character)
echo "\n";
echo substr_replace("12345", "X", 1, -1); // 1X5 (replace from index 1 to 1-before-the-end)Esempio pratico: mascherare le cifre
Sovrascrivere una porzione nota con lo stesso numero di caratteri * è un uso comune nella pratica — ad esempio, per nascondere parte di un numero di carta.
<?php
$card = "4111111111111111";
echo substr_replace($card, "********", 4, 8); // 4111********1111Utilizzo con array
Se passi un array di stringhe, substr_replace() applica la sostituzione a ogni elemento e restituisce un nuovo array. Puoi anche passare array per $replace, $offset e $length per usare valori diversi per ogni elemento.
<?php
$names = ["Alice", "Bob", "Carol"];
$result = substr_replace($names, "***", 1, 2);
print_r($result);
// Array
// (
// [0] => A***ce
// [1] => B***
// [2] => C***ol
// )Errori comuni
- Restituisce una nuova stringa.
substr_replace($s, ...)da solo non produce nulla di visibile — assegna o stampa il risultato. - Gli offset sono posizioni in byte, non in caratteri. Per testo multibyte (UTF-8) non esiste
mb_substr_replace; calcola gli offset con attenzione o ricostruisci la stringa conmb_substr(). - Un offset oltre la fine della stringa aggiunge il testo sostitutivo in coda anziché sovrascrivere.
Funzioni correlate
str_replace()— sostituzione per valore anziché per posizione.substr()— estrae una porzione di una stringa.strpos()— trova la posizione da passare asubstr_replace().str_pad()— aggiunge padding a una stringa fino a una lunghezza data.
Conclusione
substr_replace() è il corrispettivo basato sulla posizione di str_replace(). Una volta ricordato che offset e lunghezza descrivono una porzione — e che una lunghezza pari a 0 inserisce mentre un offset negativo conta dalla fine — diventa uno strumento preciso per mascherare, unire ed editare stringhe a posizioni note.