রিএ্যাকটজগুলি এইচটিএমএল স্ট্রিংকে জেএসএক্সে রূপান্তর করে


212

ফেসবুকের রিঅ্যাক্টজেএস নিয়ে কাজ করতে আমার সমস্যা হচ্ছে। আমি যখনই অজ্যাক্স করি এবং এইচটিএমএল ডেটা প্রদর্শন করতে চাই, রিএ্যাকটিজেএস এটি পাঠ্য হিসাবে প্রদর্শিত হয়। (নীচের চিত্র দেখুন)

ReactJS রেন্ডার স্ট্রিং

তথ্য jquery Ajax এর সাফল্য কলব্যাক ফাংশন মাধ্যমে প্রদর্শিত হয়।

$.ajax({
   url: url here,
   dataType: "json",
   success: function(data) {
      this.setState({
           action: data.action
      })
   }.bind(this)
});

এখানে চিত্র বর্ণনা লিখুন

এটি এইচটিএমএল রূপান্তর করার কোন সহজ উপায় আছে? আমি কীভাবে এটি ব্যবহার করব?

উত্তর:


406

ডিফল্টরূপে, এক্সএএসএস (ক্রস-সাইট স্ক্রিপ্টিং) প্রতিরোধ করতে প্রতিক্রিয়া HTML থেকে পালিয়ে যায় । আপনি যদি সত্যিই এইচটিএমএল রেন্ডার করতে চান তবে আপনি dangerouslySetInnerHTMLসম্পত্তিটি ব্যবহার করতে পারেন :

<td dangerouslySetInnerHTML={{__html: this.state.actions}} />

প্রতিক্রিয়া এই ইচ্ছাকৃতভাবে-জটিল সিনট্যাক্সকে বাধ্য করে যাতে আপনি দুর্ঘটনাক্রমে এইচটিএমএল হিসাবে পাঠ্য রেন্ডার করতে এবং এক্সএসএস বাগগুলি প্রবর্তন করেন না।


4
এই বাক্য গঠনটি হোমপেজে এবং টিউটোরিয়ালে দেখানো হয়েছে, তবে আমি বুঝতে পেরেছি এটি অন্য কোথাও নথিভুক্ত নয় তাই আমি ঠিক করার জন্য # 413 ফাইল করেছি
সোফি আল্পার্ট

সঠিক! আমি ইতিমধ্যে বিপজ্জনকভাবে
সেটইনার এইচটিএমএল

আপনি যদি কোনও বাহ্যিক এপিআই থেকে এই তথ্যটি পান তবে এনপিএম প্যাকেজটি sanitizeথেকে ফাংশনটি ব্যবহার করে সামগ্রীটি স্যানিটাইজ করা নিরাপদভাবে বাজানো উপযুক্ত dompurify
ব্যারি মাইকেল ডয়েল

77

এটি সম্পাদন করার জন্য এখন আরও নিরাপদ পদ্ধতি রয়েছে। ডক্স আপডেট করা হয়েছে এই পদ্ধতি সঙ্গে।

অন্যান্য পদ্ধতি

  1. সবচেয়ে সহজ - ইউনিকোড ব্যবহার করুন, ফাইলটিকে ইউটিএফ -8 হিসাবে সংরক্ষণ করুন এবং ইউটিএফ -8 এ সেট করুন charset

    <div>{'First · Second'}</div>

  2. নিরাপদ - জাভাস্ক্রিপ্ট স্ট্রিংয়ের অভ্যন্তরের সত্তার জন্য ইউনিকোড নম্বরটি ব্যবহার করুন।

    <div>{'First \u00b7 Second'}</div>

    অথবা

    <div>{'First ' + String.fromCharCode(183) + ' Second'}</div>

  3. অথবা স্ট্রিং এবং জেএসএক্স উপাদানগুলির সাথে একটি মিশ্র অ্যারে।

    <div>{['First ', <span>&middot;</span>, ' Second']}</div>

  4. শেষ অবলম্বন - কাঁচা এইচটিএমএল ব্যবহার করে sertোকান dangerouslySetInnerHTML

    <div dangerouslySetInnerHTML={{__html: 'First &middot; Second'}} />


15
আমি ডকুমেন্টেশন প্রস্তুত করেছি তবে ডাব্লুওয়াইএসআইওয়াইওয়াইজি সম্পাদক থেকে লম্বা এইচটিএমএল স্ট্রিংয়ের মতো? আমি দেখতে পাচ্ছি না আমরা কীভাবে 1 লা, দ্বিতীয় বা তৃতীয় পদ্ধতিটি ব্যবহার করতে পারি
এরিক

4
আমি @ এরিকের সাথে একমত ইতিমধ্যে কোথাও কোথাও সঞ্চিত সামগ্রী পালনের জন্য পদ্ধতিগুলি 1-3 কি ভাল? উদাহরণস্বরূপ একটি ডিবি? এছাড়াও 4 পদ্ধতিটি নোট করুন - একমাত্র পদ্ধতি - এর অর্থ হল আপনি শিশু নোড যুক্ত করতে পারবেন না।
ডিভিডিপিএলএম

14
হা. হার্ড-কোডড "গতিশীল" সামগ্রী সহ এই উদাহরণগুলি খুব বেশি অর্থবোধ করে না।

এটি আমার অভ্যন্তরীণ এইচটিএমএল - "অ্যাডমিনগুলি \ u003cb \ u003e1 \ u0026nbsp প্রদর্শন করা হচ্ছে; - \ u0026nbsp; 10 \ u003c / বি \ u003e total u003cb \ u003e13 \ u003c / বি 00 u003e" প্রদর্শন করা হচ্ছে - যা প্রদর্শিত হচ্ছে মোট <b> 13 </ b> এর 10 </b> প্রশাসক </ 1 & nbsp; - & nbsp; যখন আমি বিপজ্জনকভাবে সেটআইএনএইচটিএমএল ব্যবহার করার চেষ্টা করি তখন ইরিয়িং বিচ্ছেদ হয়।
vipin8169

36

আমি ব্যবহার সুপারিশ বিজড়িত দ্বারা নির্মিত milesj । এটি একটি অসাধারণ লাইব্রেরি যা কোনও সংখ্যার ব্যবহার করে যদি ডিওএমে এইচটিএমএলকে বিশ্লেষণ এবং নিরাপদে প্রবেশের জন্য উদ্ভাবনী কৌশলগুলি ব্যবহার করে।

ইন্টারভিউ হ'ল এইচটিএমএল, ফিল্টার বৈশিষ্ট্যগুলি, ম্যাচারদের সাথে টেক্সটকে অটোরেপ করা, ইমোজি চরিত্রগুলি রেন্ডার এবং আরও অনেকগুলি নিরাপদে রেন্ডার করার জন্য একটি প্রতিক্রিয়া পাঠাগার।

  • ইন্টারভিউ একটি শক্তিশালী প্রতিক্রিয়া গ্রন্থাগার যা এটি করতে পারে:
    • নিরাপদভাবে বিপজ্জনকভাবে সেটইনার এইচটিএমএল ব্যবহার না করে এইচটিএমএল রেন্ডার করুন।
    • নিরাপদে এইচটিএমএল ট্যাগগুলি স্ট্রিপ করুন।
    • স্বয়ংক্রিয় এক্সএসএস এবং ইঞ্জেকশন সুরক্ষা।
    • ফিল্টারগুলি ব্যবহার করে এইচটিএমএল বৈশিষ্ট্যগুলি সাফ করুন।
    • ম্যাথার্স ব্যবহার করে ইন্টারপোলেট উপাদানগুলি।
    • অটোলিংক ইউআরএল, আইপি, ইমেল এবং হ্যাশট্যাগ।
    • ইমোজি এবং ইমোটিকন চরিত্রগুলি রেন্ডার করুন।
    • এবং আরো অনেক কিছু!

ব্যবহারের উদাহরণ:

import React from 'react';
import { Markup } from 'interweave';

const articleContent = "<p><b>Lorem ipsum dolor laboriosam.</b> </p><p>Facere debitis impedit doloremque eveniet eligendi reiciendis <u>ratione obcaecati repellendus</u> culpa? Blanditiis enim cum tenetur non rem, atque, earum quis, reprehenderit accusantium iure quas beatae.</p><p>Lorem ipsum dolor sit amet <a href='#testLink'>this is a link, click me</a> Sunt ducimus corrupti? Eveniet velit numquam deleniti, delectus  <ol><li>reiciendis ratione obcaecati</li><li>repellendus culpa? Blanditiis enim</li><li>cum tenetur non rem, atque, earum quis,</li></ol>reprehenderit accusantium iure quas beatae.</p>"

<Markup content={articleContent} /> // this will take the articleContent string and convert it to HTML markup. See: https://milesj.gitbook.io/interweave


//to install package using npm, execute the command
npm install interweave

আপনি একটি ব্যবহারের উদাহরণ প্রদান করতে পারেন দয়া করে?
এল আননিমো

1
@ এলঅনিমিমো আমি একটি ব্যবহারের উদাহরণ যুক্ত করেছি। আশা করি বিষয়গুলি কিছুটা আরও স্পষ্ট করে তোলে।
আরমান নিশ

1
মিলিয়নকে ধন্যবাদ, আন্তঃবিশ্বেতা হ'ল আমার যা প্রয়োজন। চিয়ার্স।
নিকোলাস হ্যামিল্টন

1
এর জন্য ডকুমেন্টেশন সহায়ক নয়। এছাড়াও আমি কয়েকটি লাইন এইচটিএমএল দিয়ে চেষ্টা করেছিলাম এবং আমার একটি পৃষ্ঠাতে ত্রুটি বার্তা পূর্ণ ছিল। কারও কাছে ডকুমেন্টেশন সহ উদাহরণ রয়েছে বা কোনও সংস্থান আছে?
তরুণ কোল্লা


6

আমি এই জেএস ফিডল পেয়েছি। এটি এই মত কাজ করে

function unescapeHTML(html) {
    var escapeEl = document.createElement('textarea');
    escapeEl.innerHTML = html;
    return escapeEl.textContent;
}

<textarea className="form-control redactor"
                          rows="5" cols="9"
                          defaultValue={unescapeHTML(this.props.destination.description)}
                          name='description'></textarea>

jsfiddle লিঙ্ক


দুর্ভাগ্যক্রমে দস্তাবেজ সার্ভার রেন্ডারিংয়ে কাজ করে না।
লরেন্ট ভ্যান উইঙ্কেল

আপনি যদি import JSDOM from 'jsdom'; global.window = new JSDOM('', { url: 'http://localhost' }); global.document = global.window.document;আইডিকে গুডলাক করেন তবে এটি হতে পারে
কোটি এমব্রি

2

আপনি এইচটিএমএল-রিএ্যাক্ট-পার্সার থেকেও পার্সার () ব্যবহার করতে পারেন। আমি একই ব্যবহার করেছি। লিঙ্ক ভাগ করা হয়েছে।


2

আমি এনটিএম প্যাকেজটি ব্যবহার করতে শুরু করি যা রিএ্যাক্ট-এইচটিএমএল-পার্সার বলে


1

যারা এখনও পরীক্ষা-নিরীক্ষা করছেন তাদের জন্য এনএমপি ইনস্টল রিঅ্যাক্ট-এইচটিএমএল-পার্সার

আমি এটি ইনস্টল করার সময় এটিতে 123628 সাপ্তাহিক ডাউনলোড ছিল।

import ReactHtmlParser from 'react-html-parser'

<div>{ReactHtmlParser(htmlString)}</div>

0

আপনি প্রতিক্রিয়াতে কাঁচা এইচটিএমএল রেন্ডার করতে চাইলে আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন

<div dangerouslySetInnerHTML={{__html: `html-raw-goes-here`}} />

উদাহরণ - রেন্ডার

পরীক্ষা একটি ভাল দিন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.