ฉันจำได้ว่าเคยทำสิ่งนี้มาก่อน แต่หารหัสไม่เจอ ฉันใช้ str_replace เพื่อแทนที่อักขระหนึ่งตัวแบบนี้str_replace(':', ' ', $string);
แต่ฉันต้องการแทนที่อักขระต่อไปนี้ทั้งหมด\/:*?"<>|
โดยไม่ต้องทำ str_replace สำหรับแต่ละตัว
ฉันจำได้ว่าเคยทำสิ่งนี้มาก่อน แต่หารหัสไม่เจอ ฉันใช้ str_replace เพื่อแทนที่อักขระหนึ่งตัวแบบนี้str_replace(':', ' ', $string);
แต่ฉันต้องการแทนที่อักขระต่อไปนี้ทั้งหมด\/:*?"<>|
โดยไม่ต้องทำ str_replace สำหรับแต่ละตัว
คำตอบ:
str_replace()
สามารถรับอาร์เรย์ดังนั้นคุณสามารถทำได้:
$new_str = str_replace(str_split('\\/:*?"<>|'), ' ', $string);
หรือคุณสามารถใช้preg_replace()
:
$new_str = preg_replace('~[\\\\/:*?"<>|]~', ' ', $string);
str_replace()
Over preg_replace()
(หรือในทางกลับกัน) ในกรณีของ OP คืออะไร?
'~[\\+><-]~'
(สังเกตว่าอยู่ที่ไหน-
) เส้นประ ( -
) เป็นอักขระเมตาของนิพจน์ทั่วไปดังนั้นจึงจำเป็นต้องใช้ Escape หรือวางกลยุทธ์ในคลาสอักขระ (ทุกอย่างภายใน[]
) ดูคำตอบนี้: stackoverflow.com/a/7604888/396458
แบบนี้:
str_replace(array(':', '\\', '/', '*'), ' ', $string);
หรือใน PHP สมัยใหม่ (ตั้งแต่ 5.4 เป็นต้นไป) คำน้อยกว่าเล็กน้อย:
str_replace([':', '\\', '/', '*'], ' ', $string);
ตัวอย่างเช่นหากคุณต้องการแทนที่ search1 ด้วย replace1 และ search2 ด้วย replace2 โค้ดต่อไปนี้จะทำงาน:
print str_replace(
array("search1","search2"),
array("replace1", "replace2"),
"search1 search2"
);
// เอาต์พุต: replace1 replace2
str_replace(
array("search","items"),
array("replace", "items"),
$string
);
หากคุณกำลังแทนที่อักขระเพียงตัวเดียวคุณควรใช้ strtr()
คุณสามารถใช้preg_replace () ตัวอย่างต่อไปนี้สามารถเรียกใช้โดยใช้บรรทัดคำสั่ง php:
<?php
$s1 = "the string \\/:*?\"<>|";
$s2 = preg_replace("^[\\\\/:\*\?\"<>\|]^", " ", $s1) ;
echo "\n\$s2: \"" . $s2 . "\"\n";
?>
เอาท์พุท:
$ s2: "สตริง"
ฉันมีสถานการณ์ที่ฉันต้องแทนที่แท็ก HTML ด้วยผลลัพธ์การแทนที่ที่แตกต่างกันสองรายการ
$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;
ผลลัพธ์
"สปริงเกลอร์และตัวติดตั้งระบบป้องกันอัคคีภัย", "Steamfitter", "Terrazzo, Tile and Marble Setter",
ฉันเดาว่าคุณกำลังดูแลสิ่งนี้:
// 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);
}
ในกรณีการใช้งานของฉันฉันกำหนดพารามิเตอร์บางฟิลด์ในเอกสาร HTML และเมื่อฉันโหลดฟิลด์เหล่านี้ฉันจับคู่และแทนที่ด้วยเมธอด str_replace
<?php echo str_replace(array("{{client_name}}", "{{client_testing}}"), array('client_company_name', 'test'), 'html_document'); ?>