我们有一个有 -
的FTL <a href='javascript:func("${event.title}");'>Link</a>
当值有撇号时,如Norman'S Birthday
- 它会中断。
我们使用js_string
来修复它 -
<a href="javascript:func('${event.title?js_string}');">Link</a>
但我们还必须将$expression
周围的双引号更改为单引号 - 这不适用于双引号。
问题 -
有没有办法使用$expression
周围的原始双引号修复此问题?
像 -
<a href='javascript:func("${event.title?js_string}");'>Link</a>
注意上面的说法不起作用。
答案 0 :(得分:2)
您需要在此处应用两种转义:JavaScript字符串转义和HTML转义。您需要两者,因为这两种格式是独立的,并且JavaScript嵌入到HTML中。
如何做到这一点...原始方式是event.title?js_string?html
,但很容易忘记添加?html
,所以不要这样做。相反,请使用自动转义(请参阅https://freemarker.apache.org/docs/dgui_quickstart_template.html#dgui_quickstart_template_autoescaping)。如果您出于某种原因无法使用这种形式的自动转义(例如您使用的是旧的FreeMarker版本并且不允许升级),请将整个模板放入<#escape x as x?html>...</#escape>
。在这两种情况下,您只需编写${event.title?js_string}
,它就可以正常工作。
但是,如果您使用的是#escape
,请确保incompatible_improvements
设置(请参阅https://freemarker.apache.org/docs/pgui_config_incompatible_improvements.html)至少为2.3.20,否则?html
不会使用'
。 t逃脱import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import math
data=pd.read_csv('Social_Network_Ads.csv')
data_temp=data[:]
x_train=data.iloc[0:300,2:4].values
y_train=data.iloc[0:300,4].values
x_test=data.iloc[300:,2:4].values
y_test=data.iloc[300:,4].values
al=0.1
t0,t1,t2=1,1,1
def grad(z0,z1,z2):
i=0
s0,s1,s2=0,0,0
while i<3:
z=-(z0+z1*x_train[i][0]+z2*x_train[i][1])
s0=s0+(1/(1+math.exp(z))-y_train[i])
s1=s1+((1/(1+math.exp(z))-y_train[i])*x_train[i][0])
s2=s2+((1/(1+math.exp(z))-y_train[i])*x_train[i][1])
i+i+1
z0=z0-al*s0
z1=z1-al*s1
z2=z2-al*s2
return z0,z1,z2
j=0
while j<5:
a,b,c=grad(t0,t1,t2)
t0,t1,t2=a,b,c
print(t0,t1,t2)
j=j+1
。
答案 1 :(得分:0)
修改event.title
的值,以便单引号替换为'
,双引号替换为"
,那么您根本不必担心哪种类型的引号引用你用于其余部分。
答案 2 :(得分:0)
?js_string
应该在大括号{}之外。现在,如果您想在字符串中处理单引号'',则应该在href值周围使用双引号“”,反之亦然。单引号和双引号不能在同一字符串中使用,因此它们中的任何一个都需要替换。
解决方案:
<a href="javascript:func('${event.title!?js_string}');">Link</a>
JavaScript中可以使用相同的表达式来处理特殊字符