聪明的人:为什么在标记中使用类时regex_replace无法正常工作?

时间:2018-10-05 10:55:00

标签: regex smarty smarty3

我正在使用smarty3。我已经尝试了以下代码:

{$ver|regex_replace:"/something/":"<div class="xyz">anything</div>"}

,它返回以下错误:

  

HTTP错误500

如果我删除了div标签内的class="xyz"并使用了以下代码:

{$ver|regex_replace:"/something/":"<div>anything</div>"}

它工作正常。

1 个答案:

答案 0 :(得分:0)

基本上,您几乎可以自己提供问题的答案。

在smarty中,您拥有变量$var,并且正在使用smarty变量修饰符regex_replace进行正则表达式搜索并替换此变量。

聪明的变量修饰符regex_replace需要两个参数:

enter image description here

两个参数的类型均为string。聪明的变量修饰符中的参数用冒号分隔。

在您的第一个代码示例中

{$ver|regex_replace:"/something/":"<div class="xyz">anything</div>"}

您的第一个参数是"/something/",但是第二个参数已损坏,因为您没有使用引号!

在第二个代码示例中

{$ver|regex_replace:"/something/":"<div>anything</div>"}

您在div上删除了class属性,因此不再存在转义引号的问题。这就是您的第二个代码示例正常工作的原因。

请记住,现在您可以通过转引号来更正第一个代码示例

{$ver|regex_replace:"/something/":"<div class=\"xyz\">anything</div>"}

或者您可以使用单引号,如注释中的建议:

{$ver|regex_replace:"/something/":"<div class='xyz'>anything</div>"}

我个人更喜欢使用单引号。