strip_tags sorununa gelişmiş çözüm
PHP ile haşır neşir olan hemen herkesin bildiği ve belki özel işlerde kullandığımız strip_tags fonksiyonunda yaşadığım sorundan ve bu konuyla alakalı çözümümden bahsedeceğim.
Konuya girmeden önce özellikle W3C ( Dünya Çapında Ağ Birliği )’nin sunduğu HTML standartlarına sitenizdeki tüm sayfaların uyması gerektiğini ara ara yaptığınız değişiklikleri W3C Validator sayfasından kontrol etmeniz gerektiğini hatırlatmak isterim.
strip_tags fonksiyonu belirtilen html etiketlerinin ( html tags ) içeriğinin temizlenerek yalın halini vermeye, html kodlamasını ayıklarak sadece içeriğin çıkmasını sağlamasına yaramaktadır. Genelde kullanım alanı olarak bot yapımında aktiftir.
Yaşadığım sorun: W3C standartına uygun olmayan sitelerin içeriklerini çektikten sonra strip_tags fonksiyonunu kullanarak almaya çalıştığım içerikte sorun oluşuyordu. Sayfadaki eksik ya da kapatılmamış html etiketlerinden dolayı yazılar sanki etiketin özelliği veya içeriğiymiş gibi strip_tags fonksiyonuyla gelmiyordu.
Bunu aşağıdaki kodlamada kullanılan gelişmiş preg_match fonksiyonuyla çözüm getirdim. Bu şekilde düzensiz olan veya unutulan html etiketlerindeki yazıları artık alabiliyorum.
function strip_HTML_tags($text){ // Strips HTML 4.01 start and end tags. Preserves contents. return preg_replace('% # Match an opening or closing HTML 4.01 tag. </? # Tag opening "<" delimiter. (?: # Group for HTML 4.01 tags. ABBR|ACRONYM|ADDRESS|APPLET|AREA|A|BASE|BASEFONT|BDO|BIG| BLOCKQUOTE|BODY|BR|BUTTON|B|CAPTION|CENTER|CITE|CODE|COL| COLGROUP|DD|DEL|DFN|DIR|DIV|DL|DT|EM|FIELDSET|FONT|FORM| FRAME|FRAMESET|H\d|HEAD|HR|HTML|IFRAME|IMG|INPUT|INS| ISINDEX|I|KBD|LABEL|LEGEND|LI|LINK|MAP|MENU|META|NOFRAMES| NOSCRIPT|OBJECT|OL|OPTGROUP|OPTION|PARAM|PRE|P|Q|SAMP| SCRIPT|SELECT|SMALL|SPAN|STRIKE|STRONG|STYLE|SUB|SUP|S| TABLE|TD|TBODY|TEXTAREA|TFOOT|TH|THEAD|TITLE|TR|TT|U|UL|VAR )\b # End group of tag name alternative. (?: # Non-capture group for optional attribute(s). \s+ # Attributes must be separated by whitespace. [\w\-.:]+ # Attribute name is required for attr=value pair. (?: # Non-capture group for optional attribute value. \s*=\s* # Name and value separated by "=" and optional ws. (?: # Non-capture group for attrib value alternatives. "[^"]*" # Double quoted string. | \'[^\']*\' # Single quoted string. | [\w\-.:]+ # Non-quoted attrib value can be A-Z0-9-._: ) # End of attribute value alternatives. )? # Attribute value is optional. )* # Allow zero or more attribute=value pairs \s* # Whitespace is allowed before closing delimiter. /? # Tag may be empty (with self-closing "/>" sequence. > # Opening tag closing ">" delimiter. | <!--.*?--> # Or a (non-SGML compliant) HTML comment. | <!DOCTYPE[^>]*> # Or a DOCTYPE. %six', '', $text); }
Yorum Yap