2011-09-30 15 views
58

Mi ricordo di averlo fatto prima, ma non riesco a trovare il codice. Io uso str_replace per sostituire un personaggio come questo: str_replace(':', ' ', $string); ma voglio sostituire tutti i seguenti caratteri \/:*?"<>|, senza fare uno str_replace per ciascuno.Str_replace per più elementi

+1

si desidera sostituire tutti questi caratteri con uno spazio? –

+7

Non abbiate paura di fare riferimento all'eccellente manuale php.net e [rivedi la sezione params] (http://php.net/str_replace) per vedere se ciò che vuoi è possibile. –

risposta

64

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

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

In alternativa è possibile utilizzare preg_replace():

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

Supponendo che l'OP significasse che il backslash doveva essere sostituito, quel modello preg_replace non funzionava per me. Per far funzionare il backslash come previsto, ho dovuto usare 4 di essi (cioè "\\\\") nel pattern. – GreenMatt

+0

@GreenMatt Hai ragione. – NullUserException

+0

Una buona risposta, aggiungendo la risposta @dogbert, lo renderebbe completo per le persone che non leggono il manuale e non si rendono conto che str_split restituisce un array. – Bradmage

118

Ti piace questa:

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

Oppure, in PHP moderna (qualsiasi cosa, da 5.4 in poi), il leggermente meno prolisso:

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

Definitivamente la risposta più efficiente – zoltar

1

Si potrebbe utilizzare preg_replace(). Il seguente esempio può essere eseguito utilizzando riga di comando php:

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

uscita:

$ s2: "la stringa                    "

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

Se si sta sostituendo solo singoli caratteri, si dovrebbe utilizzare strtr()

+1

Solo caratteri singoli? Come mai? –

38

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

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

// Output: replace2 replace1

+0

bello! in qualche modo logica, ma non sapevo :) –

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

"spruzzatore e Fire Protection Installer", "Operaio addetto alle tubazioni", "Terrazzo, Piastrelle e marmo Setter",