abshammeri

ماذا ستفعل لتنظيف نص من أوسمة HTML

15 ردود في هذا الموضوع

السلام عليكم ،

من باب الفضول ، لو فرضنا أن لديك هذا النص المخزّن في قاعدة بيانات أو ملف عادي ، وتريد تنظيفه من HTML بإستثناء أوسمة معينة تريد الابقاء عليها ( لنفرض أنك تريد الابقاء على الوسم <p> و <h2> , طبعاً يشمل هذا وسم الاغلاق </p> و </h2> ) ، ما أول شيء ممكن يخطر على بالك لحل المشكلة :

<h2>The <b>if...elseif....else</b> Statement</h2>
<p>Use the if....elseif...else statement to select one of several blocks of code to be executed.</p>
<h3>Syntax</h3>
<table class="code notranslate" cellspacing="0" cellpadding="0" border="0" width="100%">
<tbody><tr><td>
if (<i>condition</i>)<br>
  <i>code to be executed if condition is true;</i><br>
elseif (<i>condition</i>)<br>
  <i>code to be executed if condition is true;<br>
</i>else<br>
  <i>code to be executed if condition is false;</i>
</td></tr>
</tbody></table>

<h3>Example</h3>

الموضوع بسيط ومش مستاهل استهلاك سعرات حرارية للتفكير ، لكن لا بأس .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اما بعض الشعوذة مع التعبيرات المنتظمة او HTMLParser

3

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

مره سويتها حسب ما بتذكر

بكل بساطة Notepad++ بالإضافة إلى Regular Expression بسيط لحذف ال Tags! طبعا داخل الإكسبرشن بتقدر تضيف إستثناء بخصوص التاجز التي ترغب بإبقائها.

أو إذا بدك حل سخيف جدا، إفتح ملف ال HTML في المتصفح ثم قم بنسخ النص الذي سوف يظهر لك :D !!

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اما بعض الشعوذة مع التعبيرات المنتظمة او HTMLParser

+1 هههه اعجبتني كلمة شعوذة , الكلمة الادق حول الموضوع !

هناك function أستخدمها في PHP :strip_tags

او كما قال احمد يوسف .

3

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

بالتأكيد أول ما أفكر به هو إدخاله إلى غرفة السيطرة و التحكم باستخدام Regular Expression

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

و الله هذا الشيء يعتمد على مدى اعتمادية "البرنامج" الذي تريد القيام بكتابته. وضعت برنامج بين علامتين تنصيص لأن هذا الأمر يمكن أن يتم عن طريق search/replace متقدمة في IDE محترم و يمكن أن يصل الأمر حتى استخدام مكتبة من العيار الثقيل للحصول على دقة 100% في عملية الـ transformation التي تريد تطبيقها. في النهاية الدقة المطلوبة تعتمد على احتياجاتك. إن كان ما تريد تنفيذه يقتصر على مجموعة من الملفات, فيمكنك كتابة script بسيط بالاستعانة بأحد خبراء بايثون في المنتدى :P و من ثم تحاول معرفة إن كانت الطريقة المستخدمة ناجحة 100% مع مجموعة الملفات التي لديك أم أن هناك حالات لم يتم أخذها في الحسبان و ربما تقول ببعض التعديلات الطفيفة. هذه هي الطريقة الأسرع و لكن الطريقة السليمة هي استخدام html parser متكامل.

تم تعديل بواسطه Khaled.Alshaya
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

use Notepad

ctrl+h

write tag by tag

replace all

انا هي بعمل :(

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

<?php
strip_tag($text, "<p><h2>");
?>

بإستخدم strip_tags

تم تعديل بواسطه SonOfTheNile
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ،

من باب الفضول ، لو فرضنا أن لديك هذا النص المخزّن في قاعدة بيانات أو ملف عادي ، وتريد تنظيفه من HTML بإستثناء أوسمة معينة تريد الابقاء عليها ( لنفرض أنك تريد الابقاء على الوسم <p> و <h2> , طبعاً يشمل هذا وسم الاغلاق </p> و </h2> ) ، ما أول شيء ممكن يخطر على بالك لحل المشكلة :

<h2>The <b>if...elseif....else</b> Statement</h2>
<p>Use the if....elseif...else statement to select one of several blocks of code to be executed.</p>
<h3>Syntax</h3>
<table class="code notranslate" cellspacing="0" cellpadding="0" border="0" width="100%">
<tbody><tr><td>
if (<i>condition</i>)<br>
  <i>code to be executed if condition is true;</i><br>
elseif (<i>condition</i>)<br>
  <i>code to be executed if condition is true;<br>
</i>else<br>
  <i>code to be executed if condition is false;</i>
</td></tr>
</tbody></table>

<h3>Example</h3>

الموضوع بسيط ومش مستاهل استهلاك سعرات حرارية للتفكير ، لكن لا بأس .

لا أعرف لاي لغة تريد الحل. تلك هي طريقتي في vb.net


' Create instance of Internet Explorer
Dim ie As New WebBrowser()
' or ie = createobject("InternetExplorer.Application")
' Navigate to blank page to create empty ie.document
ie.Navigate("about:blank")
' read the html
Dim _html = My.Computer.FileSystem.ReadAllText("C:\xx\html.txt")
' put the html in the browser
ie.Document.Write(_html)
' convert the html to text
Dim puretext = ie.Document.All(0).InnerText
MsgBox(puretext)

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

notepad++ هو الحل الذي أستخدمه في الغالب ، ولكن هو حل سيء جداً خصوصاً أني لا أجيد ولا أستسيغ شعوذة " RE " ، كما سمّاها أحمد ..

الحل المناسب و الطبيعي هو كما قلتم XML Parser ( سنعمم الموضوع ونقول XML و ليس HTML ) .

ولكن هناك حل أفضل من كل تلك الحلول وهو استخدام XSLT !

في الحقيقة ، اضطررت لأن ألجأ إلى Stackoverflow حتى يساعدوني في إثبات صحة كلامي ، حيث واجهت مشاكل لعدم تمكني من XSLT حتى الآن ، لكن خذوا هذا المثال الذي كتبته في SO :

لنفرض أن لدي هذا الملف :

<root>
<e1 att="test1" att2="test2"> Value</e1>
<e2 att="test1" att2="test2"> Value 2 <inner class='i'>inner</inner></e2>
<e3 att="test1" att2="test2"> Value 3</e3>
</root>

أريد أن أقوم بفلترة بعض العناصر ، حيث أريد إزالة العنصر e3 ، وإزالة Attribute الذي يحمل الاسم att2 ، بحيث تكون النتيجة النهائية هكذا :


<root>
<e1 att="test1" > Value</e1>
<e2 att="test1" > Value 2 <inner class='i'>inner</inner></e2>
</root>

لنفترض أن لدينا مئات الملفات التي لها نفس الحالة ونريد فلترتها .. هل ستتمكن من فعل هذا بإستخدام Regular Expressions وبدون صداع ؟

لأ .

لماذا ؟

لأن Regular Expression عالم ، و XML عالم آخر ، ولأن لدينا شيء اسمه XSLT يقوم بتحويل ملف XML إلى ملف XML آخر ..

اكتب هذا ( كود XSLT بسيط و مقروء ) :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>

<xsl:template match="e3|@att2"/>

</xsl:stylesheet>

وطبقه على ملف XML الأصلي ( قبل الفلترة ) وستكون النتيجة :

<root>
<e1 att="test1"> Value</e1>
<e2 att="test1"> Value 2 <inner class="i">inner</inner>
</e2>
</root>

حل منظم وبسيط .. وشكراً للزملاء في Stackoverflow على المساعدة :D .

القاعدة :

لا تستخدم Regular Expressions مع ملفات XML .. استخدم XSLT فهي الحل الأمثل .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الشمري

المشكلة مع XSLT ان صفحة الhtml هذه يجب ان يكون كودها نظيفا بحيث تكون valid xml

لكن الذي يحدث عمليا ان هناك العديد من المواقع التي بها اخطاء، وبالتالي المتصفحات ايضا تتغاضى عنها

فممكن ان تمر بموقع ليس strict كفاية حتى يعمل XSLT كما يجب

لهذا السبب انا أأيد HTML Parser لان بعضها مبنية على فرضية تجاهل تلك الاخطاء ايضا

بمعنى انها لا تتطلب strict html وجاهزة للعمل في بيئة الواقع التي تحتوي على html قذر

ليه رحت للخواجات يعم.... الخبير ahmed_yousef والمفتي الجهادي قالها في حكمته في اول رد:

"اما بعض الشعوذة مع التعبيرات المنتظمة او HTMLParser" :D

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

@password123 ، معك حق ، لكن من الخطأ أن نعتمد على HTML ، رأيي هو أن نتقيّد بـ XHTML ، لأن أصلاً HTML ليس XML بل SGML ( ، و هي مواصفات اندثرت و سببت معاناة للبشر خلال التسعينات ) ، لماذا نتقيد بها :-) ، يجب أن تكون ثقافة لأي مبرمج أن يركز على XML و تطبيقاتها ، أنظف وأكثر ترتيبا ً ومقروئية .

بالمناسبة : أعترف أني أخطأت بالعنوان بحديثي عن HTML ، كانت غلطة طبعاً :D ، لم يسعفني الوقت في تصحيحها ، sorry ..أتوقع لو كان الموضوع XHTML ، لرأينا بعض الأعضاء يتحدثون عن XSLT بكل تأكيد ، ولكن شتتكم بحديثي عن HTML :( .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

بالمناسبه ياعبد الله ... (أحب أن أندهك يا عبد الله - ولاحظ المسافه - أكثر من الشمري)

عملت ذات مره مع مدير من العيار الثقيل جدا جدا برمجيا ...

كان يقول لي ..

لو أمامك مشكله مثل التي بين يديك الآن ... وهى غير متكرره .. فالحل الأنسب و الانجز هو إستخدام NP++ ... و كان عفريت في إستخدامه .. (تعملت منه الكثير و الكثير في إستخدامه)

أما لو أنا الأمر متكرر بكثره ... فليس هناك حل سوى كتابة سطيرات من الكود تقوم بعمل ذلك ..

ربنا يمسيك بالخير يا مديري ... حقا تعلمت منه الكثيييير و الكثييير .. فقد كان عفريتا في أي شئ .. و كل شئ ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .