2012-12-04 18 views
19

मुझे वेब पर microtypography मुद्दों में दिलचस्पी है। "; ( माइक्रोटोग्राफी और ग्लाइफ मुद्दों को ठीक करने के लिए एचटीएमएल पार्सिंग

  • " (& # 8221;) बंद करने वाला उद्धरण (

    • उद्धरण
      • बोली के बजाय) खोलने (& # 8220) ":

        मैं एक उपकरण को ठीक करना चाहते हैं के बजाय ")

    • Apostrophe
      • '(& # 8217;) एपॉस्ट्रॉफ़ि (बजाय')
    • डैश और हाइफ़न
      • - (& # 8211; या & ndash;) एन डैश, श्रेणियों के लिए उपयोग किया जाता है, उदा। "13-15 नवंबर" (इसके बजाए -
      • - (& # 8212; या & mdash;) em dash, विचारों के परिवर्तन के लिए उपयोग किया जाता है, उदा। "स्टार वार्स है-के रूप में हर कोई जानता है-अद्भुत।" (बजाय -, या -)
    • अंडाकार
      • ... (& # 8230; या & hellip;) क्षैतिज अंडाकार, इंगित करने के लिए प्रयोग किया जाता है एक चूक या एक विराम (... के बजाय)
    • और अधिक \ o/

    सभी उन सुधारों सामग्री भाषा पर निर्भर हैं। उदाहरण के लिए, हमें प्रत्येक रचनाकृत ग्लाइफ (:, ;, , ?, !, ...) से पहले एक असुरक्षित (गैर-ब्रेकिंग) स्थान जोड़ना होगा ...), और हमारे उद्धरण «इस तरह» हैं।

    इस तरह के एक उपकरण के लिए कई बाधाओं के होते हैं:

    • यह किसी भी HTML के अंदर संरक्षित टैग संपादित नहीं कर सकते (pre, code ...)
    • यह तेजी से (एक सीएमएस उत्पादन पर इस्तेमाल किया) किया जाना चाहिए
    • यह HTML
    • और अन्यथा तोड़ना नहीं चाहिए।

      वे सब कम या ज्यादा होनहार व्यक्ति पर आधारित हैं, एक 2005 lib,:

    वहां पहले से ही बाजार पर कुछ उपकरण हैं परीक्षण नहीं किया गया, दस्तावेज नहीं किया गया है, मैन्युअल रूप से HTML को पार्स कर रहा है और अंग्रेजी से अन्य नियमों से निपट नहीं रहा है। बिलकुल नहीं।

    तो मेरी प्रश्न हैं:

    • आप इस तरह किसी भी सभ्य उपकरण का पता है?
    • मैं इसे कैसे कर सकता है? मैं पहले से ही एक POC DomCrawler का उपयोग कर, लेकिन मैं आश्वस्त नहीं हूँ। PHP में HTML को पार्स और संपादित करने का सबसे अच्छा तरीका क्या है?

    संपादित करें जुलाई 2013: मैं परीक्षण और विशेषज्ञता मैं इस मुद्दे के साथ प्राप्त की से JoliTypo विकसित किया है। कोई मौजूदा lib ऐसा नहीं कर रहा था जो मैं करना चाहता था।

  • +5

    ग्रेट सवाल, हालांकि मैं सोच रहा हूं कि यह ऐसा नहीं है बात यह है कि उस बिंदु पर प्रक्रिया करना बेहतर होगा जहां डेटा बचाया गया है, उस बिंदु के बजाए जहां यह आउटपुट है?विशेष रूप से यदि आपके पास बहुत अधिक टेक्स्ट है (जो मामला है जहां यह सबसे उपयोगी होगा), विवरणों के लिए प्रसंस्करण की कल्पना करना मुश्किल है (जैसे उपयुक्त एम और एन डैश उपयोग के बीच अंतर करना) ताकि वह काफी कुशल तरीके से ' टी लोडिंग समय में भारी वृद्धि नहीं करता है। –

    +3

    @MichaelCSchuller इसे कैश सिस्टम आईएमओ द्वारा संभाला जाना चाहिए। मुझे लगता है कि उपयोगकर्ता द्वारा सबमिट की गई सामग्री को संपादित करना और इसे जारी रखना एक बुरा विचार है क्योंकि टाइप-लिखित संस्करण को वापस पाने का कोई तरीका नहीं है। उपयोगकर्ता और रूपांतरित पाठ दोनों को संग्रहीत करना प्रदर्शन संबंधी मुद्दों के लिए एक समाधान हो सकता है। – Damien

    +1

    यह निश्चित रूप से आउटपुट के आउटपुट को मूल पाठ में प्रवेश करने वाले उपयोगकर्ता के लिए कुछ अपारदर्शी बनाने का जोखिम चलाता है, लेकिन मुझे लगता है कि यह एक तकनीकी प्रश्न के बजाय दार्शनिक है। एक कारण है कि मुझे लगता है कि मार्कडाउन जैसी चीजें टेक्स्ट इनपुट स्वरूपण के लिए इतना अच्छा समाधान है कि आप जानते हैं कि वास्तव में कौन से परिवर्तन लागू किए जाएंगे (और जैसा कि आप कहते हैं, जैसा कि आप दर्ज किए गए मूल को वापस प्राप्त कर सकते हैं)। –

    उत्तर

    8

    मेरे कुछ हद तक दोस्त शॉन कुछ है कि मैं अक्सर इस उद्देश्य के लिए उपयोग करने का निर्माण किया। आप डेमो यहाँ देख सकते हैं: http://files.seancoates.com/lexentity/ वह इसके बारे में यहाँ ब्लॉग: http://seancoates.com/blogs/lexentity और आप स्रोत यहां प्राप्त कर सकते हैं: https://github.com/scoates/lexentity

    यह अपना पूरा भाषा जरूरतों को पूरा नहीं हो सकता है, लेकिन यह अंग्रेजी के साथ एक शुरुआत है।

    +0

    अच्छा धन्यवाद! यह जिथब पर है, यूनिट परीक्षण है, मैं खुश हूं। लेकिन यह regexes के साथ एचटीएमएल पार्स कर रहा है, और यह मुझे इस ब्लॉग पोस्ट की याद दिलाता है: http://www.codinghorror.com/blog/2009/11/parsing-html-the-cthulhu-way.html मैं देखता हूं और इसे वैसे भी कोशिश करें - लेकिन यह मेरे लिए बुलेटप्रूफ को सीमित नहीं करता है। – Damien

    +1

    जैसा कि आलेख बताता है, ऐसे कई साधारण मामले हैं जहां नियमित अभिव्यक्ति की तरह कुछ उपयोग करना एक पूर्ण उड़ाए गए HTML इंजन से अधिक समझदार है। उस मामले में कोड को उनके http://phpadvent.org साइट के लेखों से निपटने के लिए डिज़ाइन किया गया था। सीएमएस आउटपुट के सामग्री भाग पर इसे चलाने के इच्छुक होने का आपका विशेष मामला मेल खाता प्रतीत होता है। इसके अलावा: मुझे केवल समाधान मिला है। – preinheimer

    +0

    टेक्स्ट स्ट्रिंग स्तर पर लागू रेगेक्स-आधारित समाधान सही समाधान है। मदद के लिए Thx, Lexentity मुझे सबसे अच्छा प्रारंभ बिंदु मिल सकता है। बक्षीस का आनंद लें ;-) – Damien

    2

    आप tidy में रुचि हो सकती। यह (यह libtidy है उपयोग करने के लिए आप सभी की जरूरत) पीएचपी 5 + साथ boundled है। यह सिर्फ HTML को पार्स नहीं करता है, बल्कि इसे भी मरम्मत करता है।

    लेकिन स्थानीयकरण के साथ, आप अपने ही हैं - intl में उद्धरण के बारे में कोई जानकारी नहीं है - f.ex .; कम से कम मैं उन्हें नहीं मिला।

    2

    के रूप में उद्धरण के बारे में इस Q tag पढ़ते हैं, दूसरों मैं BBCode पुस्तकालय का प्रयोग करेंगे। क्योंकि आपको आवश्यकतानुसार डैश के बीच अंतर करने के लिए एल्गोरिदम लिखना वास्तव में मुश्किल होगा। बीबीकोड संपादक को चुनने की अनुमति देता है, लेकिन उस स्थिति में जब संपादक को कोई कार्रवाई करना पड़ता है तो आप विशेष पात्रों को सम्मिलित करने के लिए किसी प्रकार का बटन प्रदान करने के बारे में सोच सकते हैं। उन चीज़ों के लिए जिन्हें पहचानना आसान है, आप बस बीबीकोड लिब के लिए नए नियम बनाते हैं और यदि उन्हें स्थानीय अवगत होना है तो आप विभिन्न भाषाओं के लिए नियमों का अलग-अलग सेट तैयार करेंगे। ओओपी में अत्यधिक विरासत यहां आसान हो जाएगी।

    2

    के रूप में अन्य लोगों ने कहा, एक regex आधारित समाधान खतरनाक/मना किया हो सकता है ...

    लेकिन अगर आप किस तरह की सामग्री पर एक लॉक-डाउन है आप (पर इस उपकरण का उपयोग करना चाहते हैं और यह लग रहा है जैसे आप करते हैं कि सामग्री आपके सीएमएस से आ रही है), यह पर्ल प्रोग्राम के विस्तार की तरह लगता है डेमोरोनिज़र आपके लिए इसका ख्याल रख सकता है: http://www.fourmilab.ch/webtools/demoroniser/