סגירת תגים של HTML במחרוזת טקסט ב-PHP

אני משער שכל מי שפיתח מודולים לסוגים שונים של אתרי תוכן היה צריך לקבל תוכן שנכתב על ידי מערכת ה-WYSIWYG ולהציף אותו למקום אחר. הבעיה היא שלפעמים אתה נדרש לחתוך את התוכן הזה עם substr או שהוובמסטר שהזין את התוכן הזין אותו בלי להקפיד על סגירה נכונה של תגיות.

תגיות HTML פתוחות בתוך סטרינג או תגיות סוגרות בלי תגיות פתוחות יכולות לעשות ברדק רציני בעיצוב. אחד הפתרונות האהובים עלי הוא פונקציה קטנה ופשוטה שמבצעת בדיקה של מחרוזת הטקסט ומבצעת סגירה של כל התגיות הפתוחות.

חשוב להדגיש שמבחינת ביצועים, עדיף לא להשתמש בפתרון הזה על מחרוזות טקסט גדולות מאד, עבור פילטור של טקסטים רבים עדיף להשתמש ב-tidyHTML או בפתרונות אחרים.

הנה הפונקציה


function closetags ($html){
	//put all opened tags into an array
	preg_match_all ( "#< ([a-z]+)( .*)?(?!/)>#iU", $html, $result );
	$openedtags = $result[1];
	//put all closed tags into an array
	preg_match_all ( "##iU", $html, $result );
	$closedtags = $result[1];
	$len_opened = count($openedtags);
	//all tags are closed
	if(count($closedtags) == $len_opened) {
		return $html;
	}
	$openedtags = array_reverse ( $openedtags );
	// close tags
	for($i = 0; $i < $len_opened; $i++ ) {
		if ( in_array ($openedtags[$i], $closedtags )) {
			$html .= "</" . $openedtags[$i] . ">";
		}
		else {
			unset ($closedtags[array_search($openedtags[$i], $closedtags)]);
		}
	}
	return $html;
}

השימוש כמובן הוא פשוט ביותר, רק להעביר את המחרוזת ולקבל אותה חזרה עם כל התגיות סגורות.

כדאי תמיד להשאר מעודכנים! הרשמו לעדכונים של האתר במייל! - המייל יישלח כל יום ראשון בעשר בבוקר ויכיל אך ורק את המאמרים שהתפרסמו באינטרנט ישראל. ללא ספאם, ללא הצפות, ללא בלגנים. 🙂

אהבתם? לא אהבתם? דרגו!

לא אהבתי בכלללא אהבתיבסדראהבתיאהבתי מאוד (אין הצבעות)


אל תשארו מאחור! יש עוד מה ללמוד!

הצטרפו לעדכונים!

העדכונים נשלחים אך ורק כאשר האתר מתעדכן.

רן בר-זיק

רן בר-זיק כותב כל המאמרים באינטרנט ישראל, מפתח אינטרנט מנוסה במגוון שפות ופלטפורמות.
ניתן ליצור איתי קשר באמצעות:
כתובת המייל שלי: info@internet-israel.com.
פרופיל הלינקדאין שלי
הטוויטר שלי
פרופיל הפייסבוק שלי
אני תמיד שמח לייעץ ולעזור, אך בשל עומס הפניות הרב, אני לא תמיד מצליח לענות במהירות.

מאמרים אחרונים