# Html को कच्चा html पास करें


24

मेरे पास कुछ HTML सामग्री है, यह एक बाहरी पुस्तकालय से आता है इसलिए मैं इसे बदल नहीं सकता, इसमें कई <span>और <div>टैग जैसे गुण हैं: <span style="color: #0000ff;">लेकिन जब मैं इसका उपयोग करता हूं:

$render = array(
  '#markup' => $myhtmlcontent,
);

एक रेंडर सरणी में, ड्रुपल विशेषताओं को स्ट्रिप्स करता है, और यह सिर्फ <span>शैलियों के बिना रहता है ।

इसलिए, मैं ड्रुपल परिवर्तनों से कैसे बच सकता हूं जो मैं मार्कअप के रूप में पास करता हूं, जिसे किसी भी फिल्टर की आवश्यकता नहीं होती है क्योंकि लाइब्रेरी इसे सुरक्षित बनाती है, या अंतिम रूप से इसे शैलियों की अनुमति देती है?


शैली की विशेषताएं हमेशा छीन ली जाती हैं
यजीर रामिरेज़

जवाबों:


28

इनलाइन टेम्पलेट का उपयोग करें:

  return [
    '#type' => 'inline_template',
    '#template' => '{{ somecontent }}',
    '#context' => [
      'somecontent' => $somecontent
    ]
  ];

संदर्भ के बिना आपके मामले में, बस सीधे html।

आप स्क्रिप्ट या लिंक जैसी चीजों के लिए html_tag तत्व का उपयोग भी कर सकते हैं।


2
यह IFRAME टैग्स को फ़िल्टर करता है।
जोचिम

1
और स्क्रिप्ट और शैली के टैग
यज़मीर रामिरेज़

8
{{चर | रॉ}} या <टैग> {{वैरिएबल}} </ टैग>

1
@IvanJaros बस ऑटो से बचने के लिए छोड़ देगा variable, लेकिन `\ Drupal \ Component \ उपयोगिता \ Xss :: filterAdmin ()` अभी भी <script> और शैली विशेषताओं जैसे टैग फ़िल्टर करेगा। अभी तक मैंने जो एकमात्र तरीका देखा है, वह एक जावास्क्रिप्ट फाइल को एक लाइब्रेरी के रूप में जोड़ना है और ऊपर से '# लेटेड' => 'लाइब्रेरी' => "मॉड्यूल_नाम / लाइब्रेरी_की_इन_लाइम" जोड़ना है return। @see drupal.stackexchange.com/questions/211078/…
यज़ीम रमिरेज़

1
किसी को पता है कि क्या यह HTML टिप्पणी करने का एकमात्र / सबसे अच्छा तरीका है? उदा <! - नमस्कार, विश्व! -> (nb: जैसा कि आपको ऊपर बताया गया है 'कच्ची' है)
विलियम टरेल

18

जैसा कि रेंडर एपीआई अवलोकन में प्रलेखित किया गया है , ड्रुपल 8 में # मार्कअप को दी गई स्ट्रिंग को \ Drupal \ Component \ Utility \ Xss :: filterAdmin () के माध्यम से पारित किया जाता है, जो XSS वैक्टर को ज्ञात करता है जबकि HTML टैग की अनुमति सूची की अनुमति देता है जो XSS नहीं हैं वैक्टर। अनुमत टैग की सूची सेट करने के लिए आप #allowed_tags का उपयोग कर सकते हैं, लेकिन यह ड्रुपल को स्ट्रिपिंग विशेषताओं (जैसे शैली) से नहीं रोक सकेगा।

$output['filtered_string'] = array(
  '#markup' => '<em>This is filtered</em>',
  '#allowed_tags' => ['strong'],
);

चूंकि आपके मामले में आप जटिल HTML मार्कअप पास कर रहे हैं, इसलिए आपको #type का उपयोग करना चाहिए (जैसा कि इवान जारोस से सुझाव दिया गया है या ttheme का उपयोग करें। इस मामले में, # टाइप बेहतर समाधान लगता है।

आप एक नया प्रकार भी लागू कर सकते हैं, एक रेंडर तत्व प्लगइन के साथ, लेकिन अगर केवल यही एक मामला है जहाँ आपको इसकी आवश्यकता है, तो एक रेंडर तत्व प्लगइन को लागू करना संभवतः अत्यधिक है।


12

यदि आप सरणियों को प्रस्तुत करने के लिए सादे मार्कअप जोड़ना चाहते हैं, तो आप इसे \ Drupal \ Core \ Render \ Markup का उपयोग करके बना सकते हैं । यह आपको कच्चे HTML को किसी चीज़ में डालने की अनुमति देगा। उदाहरण के लिए, HTML को तालिकाओं में डालने के लिए अनुमति रिपोर्ट मॉड्यूल में इसका उपयोग कैसे किया जाता है :

$rows[] = [
  [
    'data' => $this->l($meta['title'], new Url('permission_report.permission', ['user_permission' => $perm], $options)),
  ],
  ['data' => $users_having_role],
  ['data' => Markup::create(implode(', ', $display_roles))],
];

3
मुझे पता है कि यह रेखा से दो साल नीचे है लेकिन धन्यवाद। शुरुआती के लिए मुझे इसे सरल बनाने दें: \ Drupal \ Core \ Render \ Markup $ HeaderSettingsIcon = Markup :: create ('<i class = "fa fa-cogs"> </ i>') का उपयोग करें;
नगाटिया फ्रैंकलाइन

@NgatiaFrankline, क्या मेरा आभार व्यक्त करने का कोई तरीका है?
ड्रेश

मैंने ऐसा किया: $ फॉर्म ['first_name'] = array ('#type' => 'textfield', '#title' => t ('Your First Name:'), '#required' => TRUE, '# विशेषताएँ '=> सरणी (' वर्ग '=> सरणी (' फ़ॉर्म-नियंत्रण req '),' नाम '=> सरणी (' प्रथम_नाम ')),' #label_attributes '=> सरणी (' वर्ग '=> सरणी (') अनिवार्य ')),' # बच्चों '=> मार्कअप :: बनाएं (' <span class = "error-text"> कृपया मान्य प्रथम नाम दर्ज करें </ span> '),);
ड्रेश

12

एक रेंडर सरणी में, बस यह करें:

return [
  '#children' => $html,
];

उदाहरण के लिए, यदि इसे $htmlPHP के साथ निर्मित किया गया था highlight_string(), तो इसमें शैली विशेषताएँ होंगी, जिन्हें इसके साथ हटा दिया जाएगा #markup। लेकिन #childrenउन्हें संरक्षित करता है।


हाँ - यह मेरे लिए काम किया। इसके बजाय # मार्कअप कुछ अन्य कीवर्ड्स का उपयोग करता है जैसे #scode या #children या #customname
manimjs
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.