PHP ลบแท็ก html PHP: วิธีลบแท็ก HTML ออกจากข้อความ? การลบแท็ก html แต่ละรายการออกจากข้อความ

งานในการลบแท็ก html ทั้งหมดหรือบางส่วนออกจากสตริงมักเกิดขึ้นเมื่อจำเป็นต้องให้โอกาสแก่ผู้เยี่ยมชมเพจในการเพิ่มข้อมูลใหม่ ตัวอย่างที่พบบ่อยที่สุดคือสมุดเยี่ยมชมหรือระบบแสดงความคิดเห็นบนเว็บไซต์ ข้อความที่เพิ่มในลักษณะนี้อาจมีแท็กต่างๆ มากมาย ซึ่งถูกเพิ่มโดยไม่ได้ตั้งใจเมื่อคัดลอกข้อความหรือจงใจทำให้ข้อความ "เป็นต้นฉบับมาก" นอกจากนี้ยังควรสังเกตความพยายามที่เป็นอันตรายในการแนะนำโค้ดที่เป็นอันตรายลงในไซต์ด้วยแท็กสคริปต์หรือความพยายามที่จะทำลายเค้าโครงหน้าด้วยแท็กที่ไม่จำเป็น

ในกรณีใดๆ ข้างต้น จำเป็นต้องล้างแท็ก html ที่ไม่จำเป็นก่อนที่จะบันทึกข้อมูลใหม่

การล้างข้อความจากแท็ก html เสร็จสมบูรณ์

สำหรับงานดังกล่าวมักใช้นิพจน์ทั่วไป แต่ในบทความนี้เราจะดูวิธีที่ง่ายที่สุด - การลบแท็กโดยใช้ฟังก์ชัน strip_tags PHP ฟังก์ชันนี้จะลบแท็กออกจากสตริงที่ระบุในพารามิเตอร์

$str_in = "

ข้อความของฉันจาก หลากหลายแท็ก

" ;
$str_out = strip_tags($str_in);
เสียงสะท้อน $str_out;

จากผลของการประมวลผลนี้ เราได้รับสตริงที่ไม่มีแท็กในตัวแปร $str_out:

ข้อความของฉันพร้อมแท็กต่างๆ

* เป็นที่น่าสังเกตว่าฟังก์ชัน strip_tags จะลบเฉพาะแท็กเท่านั้น โดยปล่อยให้เนื้อหาอยู่ระหว่างแท็กเปิดและแท็กปิด

การลบแท็ก html แต่ละรายการออกจากข้อความ

บางครั้งคุณเพียงแค่ต้องลบแท็กบางแท็กออกจากสตริงเท่านั้น ที่นี่เราจะใช้ฟังก์ชัน strip_tags ด้วย แต่คราวนี้เราจะระบุแท็กที่ต้องบันทึกเป็นพารามิเตอร์ตัวที่สอง (ไม่บังคับ)

ตัวอย่างเช่น เมื่อประมวลผลสตริง คุณเพียงแค่ต้องปล่อยลิงก์ไว้:

$str_in = "

ข้อความของฉันจาก หลากหลายแท็ก

" ;
$str_out = strip_tags($str_in, " " );
เสียงสะท้อน $str_out;

จากผลของการประมวลผลในตัวแปร $str_out เราจะได้รับ:

ข้อความของฉันพร้อมแท็กต่างๆ

ด้วยวิธีนี้ คุณสามารถระบุแท็กทั้งหมดที่ถูกต้องในสตริงได้ ในขณะที่แท็กอื่นๆ ทั้งหมดจะถูกลบออก


บทความนี้กล่าวถึงวิธีที่ง่ายที่สุดในการล้างสตริงแท็ก ขณะที่ฉันพิจารณาตัวเลือกอื่นๆ ฉันจะขยายในบทความนี้ ฉันยินดีเป็นอย่างยิ่งหากคุณแนะนำทางเลือกในการแก้ปัญหานี้ในความคิดเห็นหรือทางอีเมล

JavaScript ถูกบล็อกในเบราว์เซอร์ของคุณ กรุณาเปิดใช้งาน JavaScript เพื่อให้ไซต์ทำงานได้!

strip_tags

(PHP 3 >= 3.0.8, PHP 4, PHP 5)

strip_tags - ลบแท็ก HTML และ PHP ออกจากสตริงคำอธิบาย string strip_tags (สตริง str [, string allowance_tags])

ฟังก์ชันนี้ส่งคืนสตริง str โดยลบแท็ก HTML และ PHP ออก หากต้องการลบแท็ก จะใช้หุ่นยนต์ที่คล้ายกับที่ใช้ในฟังก์ชัน fgetss()

อาร์กิวเมนต์ที่สองที่เป็นทางเลือกสามารถใช้เพื่อระบุแท็กที่ไม่ควรลบออก

หมายเหตุ: อาร์กิวเมนต์ Allowable_tags ถูกเพิ่มใน PHP 3.0.13 และ PHP 4.0b3 ความคิดเห็น HTML จะถูกลบออกจาก PHP 4.3.0 ด้วย

ความสนใจ

เนื่องจาก strip_tags() ไม่ได้ตรวจสอบความถูกต้องของโค้ด HTML แท็กที่ไม่สมบูรณ์อาจนำไปสู่การลบข้อความที่ไม่ได้เป็นส่วนหนึ่งของแท็ก

ตัวอย่างที่ 1. ตัวอย่างการใช้ strip_tags() $text = "

ย่อหน้า

ข้อความเพิ่มเติมอีกเล็กน้อย"; echo strip_tags($text); echo "\n\n-------\n"; // อย่าลบ

เสียงสะท้อน strip_tags($text, "

"); // อนุญาต ,, echo strip_tags($ข้อความ, " ");

ตัวอย่างนี้จะแสดงผล:

ย่อหน้า ข้อความเพิ่มเติมบางส่วน -------

ย่อหน้า

ข้อความเพิ่มเติมบางส่วน

ความสนใจ

ฟังก์ชันนี้จะไม่เปลี่ยนแอตทริบิวต์ของแท็กที่ระบุในอาร์กิวเมนต์ Allowable_tags รวมถึงสไตล์และ onmouseover

ตั้งแต่ PHP 5.0.0 เป็นต้นไป strip_tags() มีความปลอดภัยในการประมวลผลข้อมูลในรูปแบบไบนารี

ฟังก์ชั่นนี้มีข้อเสียเปรียบอย่างมาก - มันจะรวมคำเข้าด้วยกันเมื่อลบแท็ก นอกจากนี้ฟังก์ชันนี้ยังมีช่องโหว่อีกด้วย ฟังก์ชั่นทางเลือกที่คล้ายกับ strip_tags:

ดูคำอธิบายฟังก์ชันด้วย

ทุกคนต้องเผชิญกับงานล้าง HTML จากแท็กที่ไม่จำเป็นอย่างแน่นอน

สิ่งแรกที่ต้องคำนึงถึงคือการใช้ฟังก์ชัน strip_tags() php:
string strip_tags (สตริง str [, สตริงที่อนุญาต_tags])

ฟังก์ชันส่งคืนสตริงที่ถูกดึงออกจากแท็ก แท็กที่ไม่จำเป็นต้องลบออกจะถูกส่งผ่านเป็นอาร์กิวเมนต์ Allowable_tags ฟังก์ชั่นใช้งานได้ แต่พูดง่ายๆ ก็คือมันไม่เหมาะ ในระหว่างนี้ จะไม่มีการตรวจสอบความถูกต้องของโค้ด ซึ่งอาจนำไปสู่การลบข้อความที่ไม่รวมอยู่ในแท็ก
นักพัฒนาเชิงรุกไม่ได้นั่งเฉย ๆ ; สามารถพบได้ทางออนไลน์ ตัวอย่างที่ดีคือ strip_tags_smart

การใช้หรือไม่ใช้โซลูชั่นสำเร็จรูปเป็นทางเลือกส่วนบุคคลของโปรแกรมเมอร์ มันเกิดขึ้นบ่อยครั้งที่ฉันไม่ต้องการตัวจัดการ "สากล" และสะดวกกว่าในการล้างโค้ดด้วยนิพจน์ทั่วไป

อะไรเป็นตัวกำหนดทางเลือกของวิธีการประมวลผลอย่างใดอย่างหนึ่ง?

1. จากแหล่งข้อมูลและความซับซ้อนของการวิเคราะห์
หากคุณต้องการประมวลผลข้อความ htmp ที่ค่อนข้างเรียบง่าย โดยไม่มีรูปแบบที่สวยงามใดๆ และชัดเจนเหมือนวัน :) คุณสามารถใช้ฟังก์ชันมาตรฐานได้
หากข้อความมีคุณสมบัติบางอย่างที่ต้องนำมาพิจารณา จะมีการเขียนตัวจัดการพิเศษ บางคนอาจใช้ str_replace ตัวอย่างเช่น:

$s = array("’" => "'", // เครื่องหมายอัญประกาศเดี่ยวขวา (เช่นใน I"m)
"â€OE" => """, // เครื่องหมายคำพูดเปิด
"–" => "—", // ขีดยาว
"â€" => "”", // เครื่องหมายคำพูดปิด
"Ã " => "é", // e สำเนียงเฉียบพลัน
CH(226) . CH(128) . chr(153) => "’", // เครื่องหมายอะโพสโทรฟีขวาอีกครั้ง
CH(226) . CH(128) . chr(147) => "—", // ขีดยาวอีกครั้ง
CH(226) . CH(128) . chr(156) => "“", // เปิดเครื่องหมายคำพูด
CH(226) . CH(128) . chr(148) => "—", // M ขีดกลางอีกครั้ง
CH(226) . chr(128) => "”", // เครื่องหมายคำพูดขวา
CH(195) . chr(169) => "é", // e เฉียบพลันอีกครั้ง
);

foreach ($s เป็น $needle => $replace)
{
$htmlText = str_replace($needle, $replace, $htmlText);
}

ส่วนอื่นๆ อาจอิงตามนิพจน์ทั่วไป เป็นตัวอย่าง:

ฟังก์ชัน getTextFromHTML($htmlText)
{
$search = array (""]*?>.*?"si", // ลบจาวาสคริปต์
""]*?>.*?"si", // ลบสไตล์
""]*?>.*?"si", // ลบแท็ก xml
"""si", // ลบแท็ก HTML
""([\r\n])[\s] "", // ลบช่องว่าง
""&(quot|#34);"i", // แทนที่อักขระพิเศษ HTML
""&(แอมป์|#38);"ฉัน",
""&(lt|#60);"ฉัน",
""&(gt|#62);"ฉัน",
""&(nbsp|#160);"ฉัน",
""&(iexcl|#161);"ฉัน",
""&(ร้อยละ|#162);"ฉัน",
""&(ปอนด์|#163);"ฉัน",
""&(คัดลอก|#169);"ฉัน",
""(\d);"e"); // เขียนเป็น php

$แทนที่ = อาร์เรย์("",
"",
"",
"",
"\\1",
"\"",
"&",
"",
" ",
CH(161)
CH(162)
CH(163),
CH(169)
"chr(\\1)");

กลับ preg_replace($search, $replace, $htmlText);
}
(ในช่วงเวลาดังกล่าว ความสามารถของ preg_replace ในการทำงานกับอาร์เรย์เนื่องจากพารามิเตอร์น่าพึงพอใจมากขึ้นกว่าเดิม) หากจำเป็น คุณจะเสริมอาเรย์ด้วยขาประจำของคุณเอง ตัวอย่างเช่น ตัวสร้างนิพจน์ทั่วไปนี้สามารถช่วยคุณในการเขียนนิพจน์เหล่านี้ได้ นักพัฒนามือใหม่อาจพบว่าบทความ "ทุกอย่างเกี่ยวกับแท็ก HTML 9 นิพจน์ทั่วไปเพื่อแยกแท็ก HTML" มีประโยชน์ ดูตัวอย่างที่นั่น วิเคราะห์ตรรกะ

2. จากเล่ม
ปริมาณเกี่ยวข้องโดยตรงกับความซับซ้อนของการวิเคราะห์ (จากย่อหน้าก่อนหน้า) ข้อความจำนวนมากเพิ่มโอกาสที่คุณอาจพลาดบางสิ่งบางอย่างไปในขณะที่พยายามวางแผนและทำความสะอาดทุกอย่างอย่างสม่ำเสมอ ในกรณีนี้ วิธีการทำความสะอาดแบบ "หลายขั้นตอน" เหมาะสม นั่นคือ ให้ทำความสะอาดก่อน เช่น ด้วยฟังก์ชัน strip_tags_smart (เราจะไม่ลบซอร์สโค้ด ในกรณีนี้) จากนั้นเราจะเลือกตรวจสอบข้อความจำนวนหนึ่งเพื่อระบุ "ความผิดปกติ" เรา "ทำความสะอาด" ความผิดปกติด้วยกฎปกติ

3.จากสิ่งที่ควรได้รับเป็นผล
อัลกอริธึมการประมวลผลสามารถทำให้ง่ายขึ้นได้หลายวิธีขึ้นอยู่กับสถานการณ์ กรณีที่ฉันอธิบายไว้ในบทความก่อนหน้าของฉันแสดงให้เห็นเรื่องนี้ได้ดี ฉันขอเตือนคุณว่าข้อความนั้นมีอยู่ใน div ซึ่งนอกจากนั้นแล้วยังมี div ที่มี "breadcrumbs" โฆษณา Adsense และรายการบทความที่คล้ายกันอีกด้วย เมื่อวิเคราะห์ตัวอย่างบทความพบว่าบทความไม่มีรูปภาพและถูกแบ่งออกเป็นย่อหน้าโดยใช้ เพื่อไม่ให้ล้าง div "หลัก" จากสิ่งภายนอก คุณสามารถค้นหาย่อหน้าทั้งหมดได้ (ด้วย Simple HTML DOM Parser ซึ่งทำได้ง่ายมาก) และรวมเนื้อหาเข้าด้วยกัน ดังนั้นก่อนที่คุณจะทำกิจวัตรการทำความสะอาดเป็นประจำ ให้ลองดูว่าคุณสามารถใช้เลือดเพียงเล็กน้อยได้หรือไม่

โดยทั่วไป ระหว่างผู้สนับสนุนการแยกวิเคราะห์โค้ด HTML ซึ่งอิงตามนิพจน์ทั่วไปเพียงอย่างเดียว และการแยกวิเคราะห์ซึ่งอิงตามการวิเคราะห์โครงสร้าง DOM ของเอกสาร การสู้รบที่เกิดขึ้นจริงกำลังปะทุขึ้นบนอินเทอร์เน็ต ตัวอย่างเช่นเมื่อล้น ไร้เดียงสาตั้งแต่แรกเห็น

เมื่อคุณได้รับข้อมูลจากผู้ใช้ผ่านทางเดียวกัน คุณควรประมวลผลข้อมูลที่ส่งจากพวกเขาและรับข้อความล้วนเป็นเอาต์พุต

ฉันจะบอกคุณตอนนี้ว่าสามารถทำได้หลายวิธีอย่างไร

จะลบแท็ก HTML ทั้งหมดออกจากสตริงใน PHP ได้อย่างไร

มีฟังก์ชันใน PHP ชื่อ "strip_tags" ช่วยให้คุณสามารถลบแท็ก HTML ทั้งหมดออกจากตัวแปรได้อย่างรวดเร็วและง่ายดาย

การนำไปปฏิบัติ:

ในกรณีนี้ เราจะบันทึกแท็ก

และ . แท็กที่มีแท็กปิดไม่จำเป็นต้องระบุเมื่อบันทึก

โปรดทราบว่าฟังก์ชันนี้จะไม่ตรวจสอบความถูกต้องของมาร์กอัป HTML และหากมีแท็กที่ไม่ได้ปิดอยู่ คุณอาจเสี่ยงต่อการสูญเสียข้อความธรรมดา

จะลบแท็ก HTML ทั้งหมดออกจากสตริงใน JavaScript ได้อย่างไร

เราจะเขียนฟังก์ชันเล็กๆ ของเราเองใน JavaScript ซึ่งเราจะประมวลผลข้อมูลที่ได้รับในภายหลัง

การนำไปปฏิบัติ:

แถบฟังก์ชัน(html) ( var tmp = document.createElement("div"); tmp.innerHTML = html; return tmp.textContent || tmp.innerText; ) var content = strip ("สวัสดีชาวโลก!");

ตัวอย่างนี้ใช้ได้กับตัวแปรที่กำหนด แต่คุณสามารถสร้างใหม่ให้พอดีกับเนื้อหาที่ได้รับได้ เช่น จากฟิลด์อินพุต