2012-05-07 21 views
9

Tôi muốn điền vào một mảng JavaScript với các giá trị từ các biến PHP sử dụng TWIG.Làm thế nào để thay thế các đường đứt gãy theo hình dạng

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

Vấn đề là tôi có post biến với nhiều dòng, vì vậy các mã trên thực hiện lệnh JS tách ra để vài dòng, đó là dịch như một số lệnh, và tôi có một lỗi.

Vì vậy, tôi nghĩ rằng tôi cần phải thay thế tất cả 'dòng mới' thành "\ n".

Tôi cố gắng để làm như thế này:

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

Nhưng nó không giúp đỡ. Nó vẫn ở lại như vài dòng ...

+0

Cách chính xác duy nhất để thực hiện việc này là như sau: '{{post.nội dung | thay thế ({'\ r \ n': '\\ r \\ n', '\ n': '\\ n', '\ r': '\\ r'})}} ' – caw

Trả lời

7
+2

Thật không may, đây là không phải là giải pháp cho câu hỏi được hỏi trong bối cảnh thoát '\ n' và' \ r' trong JavaScript, bởi vì bộ lọc 'nl2br' của twig là dự phòng đơn giản với hàm' nl2br() 'trong PHP, không thay thế' \ n' và ' \ r' tất cả ký tự, nhưng thay thế chúng bằng '
\ n \ r', vì vậy khoảng trắng vẫn còn trong mã. – Athlan

4

Nếu bạn muốn chỉ cần loại bỏ các nếp phanh, điều này không làm việc:

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

'\' là một dấu hiệu đặc biệt, vì vậy bạn cần phải thoát khỏi nó. Điều này sẽ làm việc:

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

Sử dụng {{ post.content | nl2br }}

20

Đối với một vấn đề tương tự (xuất ra dữ liệu người dùng vào Javascript), tôi thấy những điều sau đây là cần thiết:

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

tức. thay thế \r cũng như \n bằng dấu cách. Điều này là do một số nội dung do người dùng nhập (đặc biệt là đối với người dùng trên Windows) có thể chứa \r (trả về vận chuyển) cũng như ngắt dòng, có vẻ như vẫn làm ngắt Javascript nếu không bị xóa.

Đối với tôi, nl2br không phù hợp vì tôi đã đưa nội dung người dùng vào phương thức Javascript (để thêm địa chỉ người dùng nhập vào Google Map, cho giá trị của nó), vì vậy tôi không muốn bất kỳ dòng nào ngắt, HTML hoặc cách khác.

7

Cách tốt nhất (và cách tốt) để viết một số javascript sử dụng cành (nếu bạn không muốn \r\n) là theo cách này:

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

Thay <br /> thể, tất nhiên, làm việc, nhưng bạn sẽ gặp phải các vấn đề khác trong javascript bằng cách sử dụng dữ liệu từ dữ liệu của bạn. Sử dụng javascript thoát, nó sẽ hoàn toàn viết javascript hợp lệ theo cách bạn mong muốn nó làm.

Để biết thêm thông tin về bộ lọc thoát:

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

+2

Câu trả lời này phải được đánh dấu là chính xác. –

0

Bạn phải sử dụng một {% chốn%} {% endspaceless%} TAG, như thế này,

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

Thưởng thức; -)

Các vấn đề liên quan