2011-09-30 28 views
58

Recuerdo haberlo hecho antes, pero no puedo encontrar el código. Yo uso str_replace para reemplazar un carácter como este: str_replace(':', ' ', $string); pero quiero reemplazar todos los siguientes caracteres \/:*?"<>|, sin hacer un str_replace para cada uno.Str_replace para varios elementos

+1

desea reemplazar todos estos caracteres con un espacio? –

+7

No tenga miedo de consultar el excelente manual de php.net y [revise la sección de parámetros] (http://php.net/str_replace) para ver si lo que desea es posible. –

Respuesta

64

str_replace() puede tomar una matriz, por lo que podría hacer:

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

Como alternativa puede usar preg_replace():

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

Asumiendo que OP significaba que la barra invertida debería ser reemplazada, ese patrón de preg_replace no funcionó para mí. Para que la barra invertida funcione como se esperaba, tuve que usar 4 de ellos (es decir, "\\\\") en el patrón. – GreenMatt

+0

@GreenMatt Tienes razón. – NullUserException

+0

Una buena respuesta, agregar @dogbert answer in lo haría completo para las personas que no leen el manual y no se dan cuenta de que str_split devuelve una matriz. – Bradmage

118

De esta manera:

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

O, en PHP moderna (nada de 5.4 en adelante), el levemente menos palabras:

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

Definitivamente la respuesta más eficiente – zoltar

1

Usted podría utilizar preg_replace(). En el siguiente ejemplo se puede ejecutar mediante php línea de comandos:

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

Salida:

$ s2: "la cadena                    "

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

Si sólo está reemplazando caracteres individuales, debe utilizar strtr()

+1

¿Caracteres individuales solamente? ¿Cómo? –

38

Por ejemplo, si desea reemplazar search1 con replace1 y search2 con replace2 luego el siguiente código funcionará:

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

// Salida: replace2 replace1

+0

¡agradable! de alguna manera lógica, pero yo no sabía :) –

0

tuve una situación en la que he tenido que cambiar las etiquetas HTML con dos resultados diferentes de reemplazo.

$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; 

resultado

"de riego e Instalador de Protección contra Incendios", "Steamfitter", "terrazo, baldosas y mármol Setter",