Menu

str_replace() ב-PHP: החלפת טקסט במחרוזת

str_replace($search, $replace, $subject) מחליפה כל מופע של $search ב-$replace. למדו מערכים של ערכי חיפוש והחלפה, ספירת החלפות, str_ireplace שלא תלויה ברישיות, והחלפה של המופע הראשון בלבד.

בדף הזה יש עורכים שאפשר להריץ - לערוך, להריץ ולראות את הפלט מיד.

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.

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל