Str_replace per più elementi


115

Ricordo di averlo fatto prima, ma non riesco a trovare il codice. Uso str_replace per sostituire un carattere in questo modo: str_replace(':', ' ', $string);ma voglio sostituire tutti i seguenti caratteri \/:*?"<>|, senza fare str_replace per ciascuno.


2
vuoi sostituire tutti questi caratteri con uno spazio?
Libro di Zeus

7
Non aver paura di fare riferimento all'eccellente manuale di php.net e rivedere la sezione params per vedere se quello che vuoi è possibile.
Mike B

Risposte:


117

str_replace() può prendere un array, quindi potresti fare:

$new_str = str_replace(str_split('\\/:*?"<>|'), ' ', $string);

In alternativa potresti usare preg_replace():

$new_str = preg_replace('~[\\\\/:*?"<>|]~', ' ', $string);

2
Supponendo che l'OP significasse che il backslash dovrebbe essere sostituito, quel pattern preg_replace non ha funzionato per me. Per fare in modo che la barra rovesciata funzionasse come previsto, ho dovuto usarne 4 (ad esempio "\\\\") nel pattern.
GreenMatt

1
Buona risposta, l'aggiunta di @dogbert answer in lo renderebbe completo per le persone che non leggono il manuale e non si rendono conto che str_split restituisce un array.
Bradmage

Qual è il vantaggio di str_replace()over preg_replace()(o viceversa) nel caso dell'OP?
ludditedev

1
@ludditedev Nessun vero vantaggio in ogni caso, è solo una questione di preferenza
NullUserException,

1
@MadhurBhaiya Cambia la regex in '~[\\+><-]~'(nota dove si -trova). Il trattino ( -) è un metacarattere regex, quindi deve essere sfuggito o posizionato strategicamente nella classe del personaggio (tutto all'interno []). Vedere questa risposta: stackoverflow.com/a/7604888/396458
NullUserException

179

Come questo:

str_replace(array(':', '\\', '/', '*'), ' ', $string);

Oppure, nel moderno PHP (qualsiasi cosa da 5.4 in poi), leggermente meno prolisso:

str_replace([':', '\\', '/', '*'], ' ', $string);

73

Ad esempio , se si desidera sostituire search1 con replace1 e search2 con replace2, il codice seguente funzionerà:

print str_replace(
    array("search1","search2"),
    array("replace1", "replace2"),
    "search1 search2"
);

// Output: sostituire1 sostituire2


48
str_replace(
    array("search","items"),
    array("replace", "items"),
    $string
);


2

Puoi usare preg_replace () . Il seguente esempio può essere eseguito utilizzando la riga di comando php:

<?php
$s1 = "the string \\/:*?\"<>|";
$s2 = preg_replace("^[\\\\/:\*\?\"<>\|]^", " ", $s1) ;
echo "\n\$s2: \"" . $s2 . "\"\n";
?>

Produzione:

$ s2: "la stringa"


Troppe fughe all'interno della classe del personaggio. (vedi risposta accettata)
mickmackusa

0

Ho avuto una situazione in cui ho dovuto sostituire i tag HTML con due diversi risultati di sostituzione.

$trades = "<li>Sprinkler and Fire      Protection Installer</li>
<li>Steamfitter </li>
<li>Terrazzo, Tile and Marble      Setter</li>";

$s1 =  str_replace('<li>', '"', $trades);

$s2 = str_replace('</li>', '",', $s1);

echo $s2;

risultato

"Installatore di irrigatori e antincendio", "Steamfitter", "Terrazzo, Tile and Marble Setter",


0

Immagino che tu ti stia occupando di questo:

// example
private const TEMPLATE = __DIR__.'/Resources/{type}_{language}.json';

...

public function templateFor(string $type, string $language): string
{
   return \str_replace(['{type}', '{language}'], [$type, $language], self::TEMPLATE);
}

0

Nel mio caso d'uso, ho parametrizzato alcuni campi in un documento HTML e una volta caricati questi campi li abbino e li sostituisco utilizzando il metodo str_replace.

<?php echo str_replace(array("{{client_name}}", "{{client_testing}}"), array('client_company_name', 'test'), 'html_document'); ?>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.