Birden çok öğe için Str_replace


115

Bunu daha önce yaptığımı hatırlıyorum ama kodu bulamıyorum. Bunun gibi bir karakteri değiştirmek için str_replace kullanıyorum: str_replace(':', ' ', $string);ancak aşağıdaki tüm karakterleri \/:*?"<>|, her biri için str_replace yapmadan değiştirmek istiyorum .


2
tüm bu karakterleri boşlukla mı değiştirmek istiyorsunuz?
Book Of Zeus

7
Mükemmel php.net kılavuzuna başvurmaktan korkmayın ve istediğiniz şeyin mümkün olup olmadığını görmek için parametreler bölümünü gözden geçirin .
Mike B

Yanıtlar:


117

str_replace() bir dizi alabilir, böylece şunları yapabilirsiniz:

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

Alternatif olarak şunları kullanabilirsiniz preg_replace():

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

2
OP'nin ters eğik çizginin değiştirilmesi gerektiği anlamına geldiğini varsayarsak, preg_replace modeli benim için çalışmadı. Ters eğik çizginin beklendiği gibi çalışmasını sağlamak için modelde 4 tanesini (yani "\\\\") kullanmak zorunda kaldım.
GreenMatt

1
İyi cevap, @ dogbert cevabını eklemek, kılavuzu okumayan ve str_split'in bir dizi döndürdüğünü fark etmeyen insanlar için tamamlayacaktır.
Bradmage

OP'nin durumunda str_replace()üzerinde preg_replace()(veya tam tersinin) avantajı nedir ?
ludditedev

1
@ludditedev Her iki şekilde de gerçek bir avantaj yok, bu sadece bir tercih meselesi
NullUserException

1
@MadhurBhaiya Normal ifadeyi '~[\\+><-]~'(nerede -olduğuna dikkat edin ) olarak değiştirin. Tire ( -) bir normal ifade meta karakteridir, bu nedenle kaçması veya karakter sınıfına stratejik olarak yerleştirilmesi gerekir (içindeki her şey []). Bu yanıta bakın: stackoverflow.com/a/7604888/396458
NullUserException

181

Bunun gibi:

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

Veya modern PHP'de (5.4'ten itibaren), biraz daha az kelime:

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

73

Örneğin , search1'i replace1 ile ve search2'yi replace2 ile değiştirmek isterseniz, aşağıdaki kod çalışacaktır:

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

// Çıktı: replace1 replace2


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


2

Preg_replace () kullanabilirsiniz . Aşağıdaki örnek, php komut satırı kullanılarak çalıştırılabilir:

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

Çıktı:

$ s2: "dize"


Karakter sınıfının içinde çok fazla kaçış. (kabul edilen cevaba bakın)
mickmackusa

0

HTML etiketlerini iki farklı değiştirme sonucuyla değiştirmek zorunda kaldım.

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

sonuç

"Sprinkler ve Yangından Korunma Tesisatçısı", "Steamfitter", "Terrazzo, Fayans ve Mermer Setter",


0

Sanırım şuna bakıyorsun:

// 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

Kullanım durumumda, bir HTML belgesindeki bazı alanları parametreleştirdim ve bu alanları yükledikten sonra str_replace yöntemini kullanarak onları eşleştirip değiştiriyorum.

<?php echo str_replace(array("{{client_name}}", "{{client_testing}}"), array('client_company_name', 'test'), 'html_document'); ?>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.