تعيد str_replace($search, $replace, $subject) نسخة من $subject مع استبدال كل ظهور لـ $search بـ $replace. تعيد str_replace('world', 'PHP', 'Hello world') النص "Hello PHP".
تعيد الدالة النص الجديد؛ ولا تعدّل المتغير الذي تمرره. أسند النتيجة، ولو إلى المتغير نفسه: $text = str_replace(...).
الصيغة
str_replace(
array|string $search,
array|string $replace,
string|array $subject,
int &$count = null
): string|array
يمكن أن يكون كل من الوسائط الثلاثة الأولى نصًا أو مصفوفة. وإذا كان $subject مصفوفة، يُنفَّذ الاستبدال على كل عنصر وتحصل على مصفوفة بالمفاتيح نفسها: تعيد str_replace('.txt', '.md', ['a.txt', 'b.txt']) المصفوفة ['a.md', 'b.md']. البحث حساس لحالة الأحرف ويطابق نصًا حرفيًا، لا أنماطًا. للأنماط استخدم preg_replace().
استبدال عدة نصوص معًا
مرّر مصفوفات لـ $search و$replace. تُستبدل قيمة البحث الأولى بالبديل الأول، والثانية بالثاني، وهكذا. وإذا كان $replace نصًا واحدًا، تُستبدل به كل قيم البحث، وهذه الطريقة القصيرة لحذف مجموعة من المحارف.
فخ الترتيب وstrtr()
مع المصفوفات، تنفّذ str_replace() استبدالًا تلو الآخر على النص كله. وقد يطابق بحث لاحق نصًا أدرجه للتو استبدال سابق. أما strtr() مع مصفوفة فتستبدل كل شيء في مرور واحد، وتجرّب المفاتيح الأطول أولًا، ولا تلمس أبدًا نصًا سبق استبداله.
استخدم strtr() للتبديل ولعناصر القوالب النائبة التي قد تظهر في القيم.
عدّ مرات الاستبدال
يُملأ الوسيط الرابع بعدد الاستبدالات التي جرت. مرّر متغيرًا؛ تكتب PHP فيه.
الاستبدال دون حساسية لحالة الأحرف بـ str_ireplace
تأخذ str_ireplace() الوسائط نفسها وتتجاهل حالة الأحرف عند المطابقة. ويُدرج البديل تمامًا كما كتبته.
لا تطوي str_ireplace() إلا حروف ASCII. للاستبدال دون حساسية لحالة الأحرف مع الحروف ذات العلامات أو الكيريلية، استخدم preg_replace() مع المعدّلين i وu.
استبدال الظهور الأول فقط
تستبدل str_replace() كل شيء دائمًا. لاستبدال أول تطابق فقط، جده بـ strpos() واقطعه بـ substr_replace():
للظهور الأخير، استخدم strrpos() مكان strpos().
حذف المسافات والأسطر الجديدة والمحارف الأخرى
الاستبدال بنص فارغ يحذف النص. ومن عمليات التنظيف الشائعة حذف فواصل الأسطر أو كل المسافات، وكثيرًا ما تحتوي المُدخلات اليابانية على مسافات كاملة العرض ( ، U+3000) لا يطابقها البحث العادي عن " ".
ضع "\r\n" قبل "\n" و"\r" في المصفوفة، حتى يصبح فاصل أسطر Windows مسافة واحدة لا اثنتين.
الأسئلة الشائعة
كيف أستبدل نصًا داخل نص في PHP؟
استخدم str_replace($search, $replace, $subject): تعيد str_replace('cat', 'dog', 'cat and cat') النص "dog and dog". تستبدل كل ظهور وتعيد نصًا جديدًا؛ ولا يتغير الأصل.
هل str_replace حساسة لحالة الأحرف؟
نعم. لا تغيّر str_replace('php', 'PHP', 'Php') شيئًا. استخدم str_ireplace()، التي تأخذ الوسائط نفسها وتتجاهل حالة الأحرف.
كيف أستبدل الظهور الأول فقط في PHP؟
ليس لـ str_replace() وسيط حد. جد الموضع بـ strpos() واستخدم substr_replace($s, $replace, $pos, strlen($search))، أو استخدم preg_replace('/' . preg_quote($search, '/') . '/', $replace, $s, 1).
كيف أستبدل عدة نصوص معًا في PHP؟
مرّر مصفوفات: str_replace(['a', 'b'], ['1', '2'], $s). تُنفَّذ الاستبدالات بالترتيب، لذا قد يطابق بحث لاحق نصًا أدرجه بحث سابق. أما strtr($s, ['a' => '1', 'b' => '2']) فتستبدل كل شيء في مرور واحد ولا تعيد الاستبدال أبدًا.
هل تعمل str_replace مع النصوص اليابانية؟
نعم. تطابق str_replace() البايتات، ولا يتطابق محرف UTF-8 كامل أبدًا داخل محرف آخر، لذا فإن str_replace('東京', '大阪', $s) آمنة. ولا حاجة إلى نسخة mb_.