2012-05-07 13 views
9

में ब्रेक लाइनों को कैसे बदलें I TWIG का उपयोग करके PHP चर से मूल्यों के साथ एक जावास्क्रिप्ट सरणी भरना चाहते हैं।ट्विग

<script type="text/javascript"> 
    var cont=new Array(); 
    {% for key, post in posts %} 
    cont[{{ key }}] = "{{ post.content }}"; 
    {% endfor %} 
</script> 

समस्या यह है कि कई आदेशों के रूप में अनुवाद किया है, और मैं एक त्रुटि है, मैं कई पंक्तियां post चर हैं, अतः उपरोक्त कोड जे एस आदेशों कुछ लाइनों को अलग करते हैं।

तो मुझे लगता है कि मैं करने के लिए "\ n" सभी 'नई लाइनों' को बदलने के लिए की जरूरत है।

मैं इस तरह करने की कोशिश की:

cont[{{ key }}] = "{{ post.content | replace({"\n":"<br>"}) }}"; 

लेकिन यह मदद नहीं करता है। यह अभी भी ... कुछ लाइनों के रूप में रहने के

+0

ऐसा करने का एकमात्र सही तरीका निम्न है: '{{post।सामग्री | प्रतिस्थापित करें ({'\ r \ n': '\\ r \\ n', '\ n': '\\ n', '\ r': '\\ r'})}} – caw

उत्तर

7

वहाँ nl2br फिल्टर है: http://twig.sensiolabs.org/doc/filters/nl2br.html

+2

दुर्भाग्यवश, यह है जावास्क्रिप्ट में '\ n' और' \ r' से बचने के संदर्भ में पूछे जाने वाले प्रश्न के समाधान का समाधान नहीं है, क्योंकि twig का 'nl2br' फ़िल्टर PHP में 'nl2br()' फ़ंक्शन में आसान फ़ॉलबैक है, जो' \ n' और ' \ r' अक्षर बिल्कुल, लेकिन उन्हें
\ n \ r' द्वारा प्रतिस्थापित करता है, इसलिए व्हाइटसाइट अभी भी कोड में हैं। – Athlan

4

तुम सिर्फ ब्रेक लाइनों को हटाने के लिए चाहते हैं, यह काम नहीं कर रहा:

{{ post.content | replace({"\n":""}) }} 

'\' एक विशेष संकेत है, तो आपको इसे से बचने की जरूरत है। यह काम करेगा:

{{ post.content | replace({"\\n":""}) }} 
4

उपयोग {{ post.content | nl2br }}

20

एक ऐसी ही समस्या (जावास्क्रिप्ट में उपयोगकर्ता डेटा outputting) के लिए, मैंने पाया निम्नलिखित जरूरी हो गया था:

post.content|replace({"\n":' ', "\r":' '}) 

अर्थात्। रिक्त स्थान के साथ \r के साथ-साथ \n को प्रतिस्थापित करें। ऐसा इसलिए है क्योंकि कुछ उपयोगकर्ता द्वारा दर्ज की गई सामग्री (विशेष रूप से विंडोज़ के उपयोगकर्ताओं के लिए) में \r (कैरिज रिटर्न) के साथ-साथ लाइन-ब्रेक भी हो सकते हैं, जो ऐसा लगता है कि हटाए जाने पर जावास्क्रिप्ट तोड़ता है।

मेरे लिए, nl2br उपयुक्त नहीं था, क्योंकि मैं उपयोगकर्ता सामग्री को जावास्क्रिप्ट विधि में जोड़ रहा था (उपयोगकर्ता द्वारा इनपुट किए गए पते को Google मानचित्र में जोड़ने के लिए, इसके लायक होने के लिए), इसलिए मुझे कोई लाइन नहीं चाहिए ब्रेक, एचटीएमएल या अन्यथा।

7

सबसे अच्छा तरीका है (और अच्छा तरीका है) कुछ टहनी (आप \r\n नहीं करना चाहते हैं) का उपयोग कर जावास्क्रिप्ट लिखने के लिए इस तरह से है:

{{ example|e('js') }} 

की जगह <br /> कर सकते हैं, ज़ाहिर है, काम करते हैं, लेकिन आप करेंगे अपने डेटा से डेटा का उपयोग कर जावास्क्रिप्ट में अन्य समस्याओं का सामना करें। जावास्क्रिप्ट से बचने का उपयोग करके, यह पूरी तरह से वैध जावास्क्रिप्ट लिख देगा जिस तरह से आप इसकी अपेक्षा करेंगे।

भागने फिल्टर के बारे में अधिक जानकारी के लिए:

http://twig.sensiolabs.org/doc/filters/escape.html

+2

यह उत्तर सही के रूप में चिह्नित किया जाना चाहिए। –

0

आप एक {% अपार%} {% endspaceless%} टैग का उपयोग करने के लिए इस प्रकार

<script type="text/javascript"> 
    var cont=new Array(); 
    {% for key, post in posts %} 
    cont[{{ key }}] = "{% spaceless %}{{ post.content }}{% endspaceless %}"; 
    {% endfor %} 
</script> 

का आनंद लें, -)