2012-10-19 18 views
8

में टिप्पणियां ढूंढना मेरे पास एक HTML फ़ाइल है और इसके भीतर जावास्क्रिप्ट, PHP और ये सभी चीज़ें हो सकती हैं जो लोग अपनी HTML फ़ाइल में डाल सकते हैं या नहीं।एचटीएमएल

मैं इस HTML फ़ाइल से सभी टिप्पणियां निकालना चाहता हूं।

मैं यह कर में दो समस्याओं का कहना कर सकते हैं:

  1. क्या एक भाषा में एक टिप्पणी किसी अन्य रूप में एक टिप्पणी नहीं हो सकता है।

  2. जावास्क्रिप्ट में, लाइनों के शेष // मार्कर का उपयोग बाहर टिप्पणी की कर रहे हैं। लेकिन यूआरएल भी उनके भीतर // होते हैं और इसलिए मैं अच्छी तरह से यूआरएल के कुछ हिस्सों अगर मैं // और फिर लाइन की शेष प्रतिस्थापन लागू , कुछ भी नहीं के साथ खत्म करने सकता है।

तो यह एक मामूली समस्या नहीं है।

क्या पहले से ही इसके लिए कुछ समाधान उपलब्ध है?

क्या कोई पहले से ही ऐसा कर चुका है?

+3

आप सही हैं कि यह मामूली नहीं है। टिप्पणियों को विश्वसनीय रूप से हटाने के लिए, आपको फ़ाइल (PHP, HTML, और जावास्क्रिप्ट) को पूरी तरह से पार्स करने की आवश्यकता है। यदि संभव हो तो मैं PHP में काम करने का सुझाव देता हूं; जबकि मुझे पर्ल बेहतर पसंद है, PHP पर काम करने के लिए PHP के उपकरण PHP पर काम करने के लिए पर्ल टूल से बेहतर हैं। शुरू करने के लिए यहां कुछ है: http://stackoverflow.com/questions/503871/best-way-to-automatically-remove-comments-from-php-code। फिर आपको फ़ाइल के उन हिस्सों के लिए PHP में HTML और जावास्क्रिप्ट पार्सर्स को खोजने की आवश्यकता है। – dan1111

+0

आपके एचटीएमएल फाइल में PHP क्यों होगा? मेरे पास अभी सीएसएस, जावास्क्रिप्ट और एचटीएमएल है, फिर उन उत्पादों के लिए Google "एचटीएमएल मिनीफायर" जो टिप्पणियां, व्हाइटस्पेस, और आम तौर पर आपके पृष्ठों को "पतला" कर सकता है। –

+1

@ आरबी। पहले से प्रदान की गई? – Jivings

उत्तर

0

यह आपके शब्द से लगता है कि आप नियमित अभिव्यक्तियों के आधार पर कुछ दृष्टिकोण पर विचार कर रहे हैं: पूरी फ़ाइल पर ऐसा करने का दर्द है, रोचक या अनिच्छुक पाठ को हाइलाइट करने या त्यागने के लिए कुछ टूल का उपयोग करने का प्रयास करें और फिर काम करें रखो/त्याग मानदंडों के अनुसार आपकी चलनी से क्या बचा है। एचटीएमएल :: ट्री और ट्रीबिल्डर पर एक नज़र डालें, एचटीएमएल मार्कअप से निपटने के लिए यह बहुत उपयोगी हो सकता है।

2

समस्या 2: हर यूआरएल के साथ, उद्धृत नहीं है या तो "www.url.com" या 'www.url.com', जब आप किसी भी भाषा में लिखने? मुझे यकीन नहीं है। यदि ऐसा है तो आप कोड को पार्स करना चाहते हैं और बैकस्लाश से पहले कोई उद्धरण चिह्न है या नहीं, यह जानने के लिए कि क्या यह वास्तविक यूआरएल है या सिर्फ एक टिप्पणी है।

+0

वास्तव में मैं अभी क्या कर रहा हूं। –

+0

तो क्या आपने समस्या हल कर ली है? यदि नहीं (शायद मैं आपके प्रश्न को सही नहीं समझा), तो समस्या क्या है? :) –

+0

नहीं। यूआरएल विश्वसनीय रूप से उद्धृत नहीं हैं। '' एक counterexample है। '' दूसरा है। –

1

एएनटीएलआर जैसे पार्सर जेनरेटर में देखें जिसमें many languages के लिए व्याकरण है और विश्वसनीय रूप से टिप्पणियां खोजने के लिए घोंसले पार्सर लिखें। यदि सटीकता महत्वपूर्ण है तो नियमित अभिव्यक्ति आपकी सहायता नहीं करेंगे। फिर भी, यह 100% सटीक नहीं होगा।

पर विचार करें

समस्या 3, एक भाषा में एक टिप्पणी नहीं हमेशा एक भाषा में एक टिप्पणी है।

<textarea><!-- not a comment --></textarea> 
<script>var re = /[/*]not a comment[*/]/, str = "//not a comment";</script> 

समस्या 4, एक भाषा में एम्बेडेड एक टिप्पणी स्पष्ट रूप से एक टिप्पणी नहीं हो सकती है।

<button onclick="&#47;&#47; this is a comment//&#10;notAComment()"> 

समस्या 5, कोई टिप्पणी क्या है कि ब्राउजर कॉन्फ़िगर किया गया है इस पर निर्भर हो सकता है।

<noscript><!-- </noscript> Whether this is a comment depends on whether JS is turned on --> 
<!--[if IE 8]>This is a comment, except on IE 8<![endif]--> 

मैं प्रासंगिक templating प्रणाली है कि स्रोत कोड से टिप्पणी छिपाना सॉफ्टवेयर कार्यान्वयन विवरण लीक को रोकने के लिए के लिए आंशिक रूप से इस समस्या को हल करने के लिए किया था।

https://github.com/mikesamuel/html-contextual-autoescaper-java/blob/master/src/tests/com/google/autoesc/HTMLEscapingWriterTest.java#L1146 एक testcase जहां एक टिप्पणी जावास्क्रिप्ट में पहचाना जाता है पता चलता है, और बाद में testcases सीएसएस और HTML में पहचान टिप्पणियां दिखाएं। आप टिप्पणी खोजने के लिए उस कोड को अनुकूलित करने में सक्षम हो सकते हैं।यह PHP कोड खंडों में टिप्पणियों को संभाल नहीं पाएगा।

0

मैं HTML फ़ाइल को एक वर्ण सरणी में परिवर्तित कर दूंगा और इसे पार्स कर दूंगा। आप "<", "-", "www", "http" जैसे प्रमुख तारों का पता लगा सकते हैं, जैसे आप आगे बढ़ते हैं और या तो उन सेगमेंट को छोड़ या हटाते हैं।

प्रारंभ/समाप्ति सूचकांक को सही ढंग से पहचाना जाना चाहिए, जो एक चुनौती है लेकिन आपके पास पूर्ण शक्ति होगी।

यदि प्रदर्शन कोई समस्या नहीं है तो प्रक्रिया को सरल बनाने के अन्य तरीके भी हैं। उदाहरण के लिए, सभी टैग एक्सएमएल :: ट्विग के साथ पकड़े जा सकते हैं और जेएस टिप्पणियों का पता लगाने के लिए स्ट्रिंग को पार्स किया जा सकता है।