0

まったく同じ構文を使用する MTHAML の PHP ポートを使用しています。内部で変数を使用するときに変数に触れないように MTHAML に指示するにはどうすればよいですか

https://github.com/arnaud-lb/MtHaml

たとえば、これ

  :javascript
      if (#{$response)} !== "") {
        show_error("#{$response}");
      }

これに変換されます

  <script type="text/javascript">
  //<![CDATA[
      if (<?php echo htmlspecialchars(escape("$response"),ENT_QUOTES,'UTF-8'); ?> !== "") {
        show_error("<?php echo htmlspecialchars($response,ENT_QUOTES,'UTF-8'); ?>");
      }
  //]]>
  </script>

そのため、レンダリングされた JavaScript で PHP ブール変数が空白として表示されるか、PHP 変数が引用符付きの文字列である場合、引用符は " に変換されてしまいます。

4

1 に答える 1

0

自動エスケーパーは、コンテキスト (html、js など) を認識しません。#{}残念ながら、補間で無効にすることはできません。

あなたができることは、php変数をhtmlデータ属性として公開することです:

#data(data-response=$data)
:javascript
    var response = $("#data").data("response");
    ...

または、MtHaml/PHP の代わりに MtHaml/Twig に切り替えます。Twig オートエスケーパがさらにパワーアップ。

- autoescape true js
    :javascript
        if ("#{response}") { // response is escaped in javascript mode
于 2013-07-19T08:10:47.303 に答える