সংক্ষিপ্ত সংস্করণ!
import re, cgi
tag_re = re.compile(r'(<!--.*?-->|<[^>]*>)')
# Remove well-formed tags, fixing mistakes by legitimate users
no_tags = tag_re.sub('', user_input)
# Clean up anything else by escaping
ready_for_web = cgi.escape(no_tags)
রেজেক্স উত্স: মার্কআপসেফ । তাদের সংস্করণটি এইচটিএমএল সত্তাকেও পরিচালনা করে, যদিও এই দ্রুতটি তা করে না।
আমি কেন কেবল ট্যাগগুলি ফাঁক করে ছেড়ে দিতে পারি না?
মানুষকে চারপাশে ভাসমান <i>italicizing</i>না রেখে জিনিস থেকে দূরে রাখা এক জিনিস i। তবে স্বেচ্ছাচারিত ইনপুট নেওয়া এবং এটিকে সম্পূর্ণ নিরীহ করে তোলা অন্য। এই পৃষ্ঠার বেশিরভাগ কৌশল অবরুদ্ধ মন্তব্য ( <!--) এবং কোণ-বন্ধনীগুলির মতো জিনিসগুলি ছেড়ে দেবে যা ট্যাগগুলির অংশ ( blah <<<><blah) অক্ষত নেই। এইচটিএমএল পার্সার সংস্করণটি এমনকি কোনও বিবৃত মন্তব্যের মধ্যে থাকলে সম্পূর্ণ ট্যাগগুলি এখানে রেখে দিতে পারে।
যদি আপনার টেম্পলেট হয় {{ firstname }} {{ lastname }}? firstname = '<a'এবং lastname = 'href="http://evil.com/">'এই পৃষ্ঠায় প্রতিটি ট্যাগ স্ট্রিপারের মাধ্যমে দেওয়া হবে (@ মেদিরোস ব্যতীত!), কারণ তারা নিজেরাই পুরোপুরি ট্যাগ নেই। সাধারণ এইচটিএমএল ট্যাগগুলি ছড়িয়ে দেওয়া যথেষ্ট নয়।
strip_tagsএই প্রশ্নের শীর্ষ উত্তরের একটি উন্নত (পরবর্তী শিরোনামটি দেখুন) সংস্করণ জ্যাঙ্গো নিম্নলিখিত সতর্কতা দেয়:
ফলস্বরূপ কোনও এইচটিএমএল সুরক্ষিত স্ট্রিং সম্পর্কে কোনও গ্যারান্টি সরবরাহ করা হয়নি। সুতরাং কোনও strip_tagsকলকে প্রথমে এড়িয়ে চলা ছাড়া নিরাপদ হিসাবে চিহ্নিত করুন না , উদাহরণস্বরূপ escape()।
তাদের পরামর্শ অনুসরণ করুন!
এইচটিএমএল পার্সারের সাহায্যে ট্যাগগুলি ছাঁটাতে আপনাকে এটি একাধিকবার চালাতে হবে।
এই প্রশ্নের শীর্ষের উত্তরটি বাতিল করা সহজ।
এই স্ট্রিংটি দেখুন ( উত্স এবং আলোচনা ):
<img<!-- --> src=x onerror=alert(1);//><!-- -->
এইচটিএমএল পার্সার এটি প্রথমবার দেখলে এটি বলতে পারে না যে এটি <img...>একটি ট্যাগ। এটি ভাঙা দেখায়, তাই এইচটিএমএল পার্সার এ থেকে মুক্তি পায় না। এটি কেবল আপনাকেই <!-- comments -->ছাড়িয়ে যায়
<img src=x onerror=alert(1);//>
এই সমস্যাটি জাঙ্গো প্রকল্পে 2014 সালের মার্চ মাসে প্রকাশ করা হয়েছিল। তাদের পুরানো strip_tagsমূলত এই প্রশ্নের শীর্ষ জবাব হিসাবে একই ছিল। তাদের নতুন সংস্করণটি মূলত এটিকে একটি লুপে চালায় যতক্ষণ না আবার এটি চালানো স্ট্রিং পরিবর্তন করে না:
# _strip_once runs HTMLParser once, pulling out just the text of all the nodes.
def strip_tags(value):
"""Returns the given HTML with all tags stripped."""
# Note: in typical case this loop executes _strip_once once. Loop condition
# is redundant, but helps to reduce number of executions of _strip_once.
while '<' in value and '>' in value:
new_value = _strip_once(value)
if len(new_value) >= len(value):
# _strip_once was not able to detect more tags
break
value = new_value
return value
অবশ্যই আপনি যদি সর্বদা এর ফলাফল থেকে বাঁচেন তবে এগুলির কোনওই সমস্যা নয় strip_tags()।
আপডেট 19 মার্চ, 2015 : জঙ্গো সংস্করণে 1.4.20, 1.6.11, 1.7.7 এবং 1.8c1 এর আগে একটি বাগ ছিল। এই সংস্করণগুলি স্ট্রিপ_ট্যাগগুলি () ফাংশনে একটি অসীম লুপ প্রবেশ করতে পারে। স্থির সংস্করণ উপরে পুনরুত্পাদন করা হয়। আরও বিশদ এখানে ।
অনুলিপি বা ব্যবহার ভাল জিনিস
আমার উদাহরণ কোডটি এইচটিএমএল সত্তাগুলি পরিচালনা করে না - জাজানো এবং মার্কআপসেফ প্যাকেজযুক্ত সংস্করণগুলি।
আমার উদাহরণ কোডটি ক্রস-সাইট স্ক্রিপ্টিং প্রতিরোধের জন্য দুর্দান্ত মার্কআপসে লাইব্রেরি থেকে টানা হয়েছে is এটি সুবিধাজনক এবং দ্রুত (সিটি স্পিডআপ সহ এর মূল পাইথন সংস্করণে)। এটা তোলে মধ্যে অন্তর্ভুক্ত Google App ইঞ্জিন , এবং দ্বারা ব্যবহৃত Jinja2 (2.7 এবং তার পরবর্তী) , Makó, pylons, ড। এটি জ্যাঙ্গো ১.7 থেকে জাজানো টেম্পলেটগুলির সাথে সহজেই কাজ করে।
সাম্প্রতিক সংস্করণ থেকে জ্যাঙ্গোর স্ট্রিপ_ট্যাগ এবং অন্যান্য এইচটিএমএল ইউটিলিটিগুলি ভাল, তবে আমি সেগুলি মার্কআপসেফের চেয়ে কম সুবিধাজনক বলে মনে করি। তারা বেশ স্ব-অন্তর্নিহিত, আপনি এই ফাইলটি থেকে যা প্রয়োজন তা অনুলিপি করতে পারেন ।
আপনার যদি প্রায় সব ট্যাগ ফেলা প্রয়োজন তবে ব্লিচ লাইব্রেরিটি ভাল। আপনার কাছে এটি "আমার ব্যবহারকারীরা জিনিসগুলিকে ইটালাইজ করতে পারে তবে তারা আইফ্রেমেস তৈরি করতে পারে না" এর মতো বিধি প্রয়োগ করতে পারে।
আপনার ট্যাগ স্ট্রিপারের বৈশিষ্ট্যগুলি বুঝুন! এটির উপর ফজ পরীক্ষা চালান! এই উত্তরের জন্য আমি গবেষণাটি করতে কোডটি এখানে ব্যবহার করি।
ভেড়া নোট - প্রশ্নটি নিজেই কনসোলে মুদ্রণের বিষয়ে, তবে এটি "স্ট্রিং থেকে পাইথন স্ট্রিপ এইচটিএমএল" এর জন্য শীর্ষ গুগলের ফলাফল, তাই এই উত্তরটি ওয়েব সম্পর্কে 99%।
&) কীভাবে পরিচালনা করবেন তা একটি গুরুত্বপূর্ণ বিবেচনা । আপনি হয় 1) ট্যাগ সহ এগুলি মুছে ফেলতে পারেন (প্রায়শই অযাচিত এবং অপ্রয়োজনীয় যেহেতু তারা সরল পাঠ্যের সমতুল্য), ২) এটিকে অপরিবর্তিত রেখে দিন (যদি স্ট্রাইপযুক্ত পাঠ্যটি কোনও HTML প্রসঙ্গে ফিরে আসে তবে একটি উপযুক্ত সমাধান) বা 3 ) এগুলি সরল পাঠ্যে ডিকোড করুন (যদি স্ট্রিপড পাঠ্য কোনও ডেটাবেজে বা অন্য কোনও এইচটিএমএল প্রসঙ্গে চলে যায়, বা যদি আপনার ওয়েব ফ্রেমওয়ার্কটি স্বয়ংক্রিয়ভাবে আপনার জন্য পাঠ্যের HTML প্রেরণ সম্পাদন করে)।