Str_replace dla wielu elementów

115

Pamiętam, że robiłem to wcześniej, ale nie mogę znaleźć kodu. Używam str_replace, aby zastąpić jeden znak w ten sposób: str_replace(':', ' ', $string);ale chcę zamienić wszystkie następujące znaki \/:*?"<>|, bez robienia str_replace dla każdego.

w tym samym wieku
źródło
2
chcesz zastąpić wszystkie te znaki spacją?
Book Of Zeus,
7
Nie bój się sięgnąć do doskonałego podręcznika php.net i przejrzeć sekcję parametrów, aby sprawdzić, czy to, czego chcesz, jest możliwe.
Mike B,

Odpowiedzi:

117

str_replace() może wziąć tablicę, więc możesz zrobić:

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

Alternatywnie możesz użyć preg_replace():

$new_str = preg_replace('~[\\\\/:*?"<>|]~', ' ', $string);
NullUserException
źródło
2
Zakładając, że OP oznaczało, że należy zamienić odwrotny ukośnik, ten wzorzec preg_replace nie działał dla mnie. Aby odwrócony ukośnik działał zgodnie z oczekiwaniami, musiałem użyć 4 z nich (tj. „\\\\”) we wzorcu.
GreenMatt
1
Dobra odpowiedź, dodanie odpowiedzi @dogbert w uczyniłoby ją kompletną dla osób, które nie czytają instrukcji i nie zdają sobie sprawy, że str_split zwraca tablicę.
Bradmage
Jaka jest przewaga str_replace()nad preg_replace()(lub odwrotnie) w przypadku PO?
ludditedev,
1
@ludditedev Bez realnej korzyści tak czy inaczej, to tylko kwestia preferencji
NullUserException,
1
@MadhurBhaiya Zmień wyrażenie regularne na '~[\\+><-]~'(zwróć uwagę, gdzie -jest). Myślnik ( -) jest metaznakiem wyrażenia regularnego, więc musi uciekać lub strategicznie umieścić go w klasie postaci (wszystko w środku []). Zobacz tę odpowiedź: stackoverflow.com/a/7604888/396458
NullUserException
181

Lubię to:

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

Lub, we współczesnym PHP (od 5,4 wzwyż), nieco mniej rozwlekły:

str_replace([':', '\\', '/', '*'], ' ', $string);
Dogbert
źródło
73

Na przykład , jeśli chcesz zamienić wyszukiwanie1 na zamień1 i wyszukiwanie2 na zamień2, zadziała następujący kod:

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

// Wyjście: zamień1 zamień2

Sumoanand
źródło
48
str_replace(
    array("search","items"),
    array("replace", "items"),
    $string
);
Marty
źródło
6

Jeśli zastępujesz tylko pojedyncze znaki, powinieneś użyć strtr()

Pigułki wybuchowe
źródło
2
Tylko pojedyncze znaki? Dlaczego?
Jimmy Kane,
2

Możesz użyć preg_replace () . Poniższy przykład można uruchomić za pomocą php wiersza poleceń:

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

Wynik:

$ s2: "ciąg znaków"

GreenMatt
źródło
Za dużo ucieczki wewnątrz klasy postaci. (zobacz zaakceptowaną odpowiedź)
mickmackusa
0

Miałem sytuację, w której musiałem zamienić tagi HTML na dwa różne wyniki zamiany.

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

wynik

„Instalator instalacji tryskaczowych i przeciwpożarowych”, „Instalator parowy”, „Układarka do lastryko, płytek i marmuru”,

Tempteh
źródło
0

Chyba się tym opiekujesz:

// 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);
}
Erald Karakashi
źródło
0

W moim przypadku sparametryzowałem niektóre pola w dokumencie HTML, a po załadowaniu tych pól dopasowuję je i zastępuję za pomocą metody str_replace.

<?php echo str_replace(array("{{client_name}}", "{{client_testing}}"), array('client_company_name', 'test'), 'html_document'); ?>
podgląd danych
źródło