Je souhaite remplir un tableau JavaScript avec les valeurs de PHP variables à l'aide de TWIG.
<script type="text/javascript">
var cont=new Array();
{% for key, post in posts %}
cont[{{ key }}] = "{{ post.content }}";
{% endfor %}
</script>
Le problème est que j'ai la variable post
avec plusieurs lignes. Le code ci-dessus crée donc des commandes JS séparées en quelques lignes, qui sont traduites en plusieurs commandes, et j'ai une erreur.
Je pense donc que je dois remplacer toutes les "nouvelles lignes" par "\ n".
J'ai essayé de faire comme ça:
cont[{{ key }}] = "{{ post.content | replace({"\n":"<br>"}) }}";
Mais ça n'aide pas. Il reste encore que quelques lignes…
Pour un problème similaire (afficher les données de l'utilisateur en Javascript), j'ai jugé nécessaire le suivant:
post.content|replace({"\n":' ', "\r":' '})
c'est à dire. remplacez \r
ainsi que \n
par des espaces. En effet, certains contenus entrés par les utilisateurs (en particulier les utilisateurs de Windows) peuvent contenir \r
(retours à la ligne), ainsi que des sauts de ligne, qui semblent encore altérer le langage Javascript s'ils ne sont pas supprimés.
Pour moi, nl2br ne convenait pas, car je transmettais le contenu de l'utilisateur à une méthode Javascript (pour ajouter des adresses saisies par l'utilisateur à une carte Google, ce qui en valait la peine), je ne voulais donc pas de saut de ligne, HTML ou autrement.
Le meilleur moyen (et le meilleur moyen) d'écrire du javascript à l'aide de Twig (si vous ne voulez pas \r\n
) est le suivant:
{{ example|e('js') }}
Remplacer <br />
peut, bien sûr, fonctionner, mais vous rencontrerez d’autres problèmes en javascript en utilisant les données de vos données. En utilisant javascript escape, il écrira parfaitement un javascript valide comme vous le souhaiteriez.
Pour plus d'informations sur le filtre d'échappement:
Il existe un filtre nl2br: http://twig.sensiolabs.org/doc/filters/nl2br.html
Utilisez {{ post.content | nl2br }}
Si vous souhaitez simplement supprimer les conduites de frein, cela ne fonctionne pas:
{{ post.content | replace({"\n":""}) }}
'\' est un signe spécial, vous devez donc y échapper. Cela fonctionnera:
{{ post.content | replace({"\\n":""}) }}
Vous devez utiliser une balise {% spaceless%} {% endspaceless%}, comme ceci,
<script type="text/javascript">
var cont=new Array();
{% for key, post in posts %}
cont[{{ key }}] = "{% spaceless %}{{ post.content }}{% endspaceless %}";
{% endfor %}
</script>
Prendre plaisir ;-)