python将str转换为javascript文本字符串
我想使用python动态生成javascript代码python将str转换为javascript文本字符串,javascript,python,Javascript,Python,我想使用python动态生成javascript代码 def convert(jsstring=''): return 'function dosomething () { return %s.toLowerCase(); }' % jsstring 问题是jsstring是python字符串 如何将其转换回javascript字符串文字,使dosomething成为有效的javascript函数 比如说 召唤 现在输出 function dosomething () { retur
def convert(jsstring=''):
return 'function dosomething () { return %s.toLowerCase(); }' % jsstring
问题是jsstring是python字符串
如何将其转换回javascript字符串文字,使dosomething成为有效的javascript函数
比如说
召唤
现在输出
function dosomething () { return javascript.toLowerCase(); }
哪一个不是有效的javascript函数
预期产量
function dosomething () { return "javascript".toLowerCase(); }
function dosomething () { return "javascript\'".toLowerCase(); }
另一个例子,打电话
convert("javascript\'")
预期产量
function dosomething () { return "javascript".toLowerCase(); }
function dosomething () { return "javascript\'".toLowerCase(); }
非常感谢。如何在%s周围添加适当的引号,即: 下面是一个命令行会话来澄清区别:
In [10]: joe = 'somestring'
In [11]: '%s.toLowerCase();' % joe
Out[11]: 'somestring.toLowerCase();'
In [12]: '"%s".toLowerCase();' % joe
Out[12]: '"somestring".toLowerCase();'
逐步完成您的代码:
def convert(jsstring=''):
return 'function dosomething () { return %s.toLowerCase(); }' % jsstring
现在,如果jsstring是Foo,它会生成什么
function dosomething () { return Foo.toLowerCase(); }
这当然会失败。javascript函数中没有名为Foo set的变量
>>> def convert(jsstring=''):
return repr('function dosomething () { return %s.toLowerCase(); }' % jsstring)
>>> convert("\"javascript\"\"")
'\'function dosomething () { return "javascript"".toLowerCase(); }\''
很可能,您需要字符串文字:
def convert(jsstring=''):
return 'function dosomething () { return "%s".toLowerCase(); }' % jsstring
当然,如果jsstring包含引号、换行符和其他敏感字符,则需要确保没有任何错误。我将把它留给您。您最好将传递给函数的内容适当地引用字符串。这将使事情变得简单 对于上面提到的例子
>>> convert('"javascript"')
'function dosomething () { return "javascript".toLowerCase(); }'
如果您想传递一个带引号的字符串,请适当地对其进行转义
>>> print convert("\"javascript\"\"")
function dosomething () { return "javascript"".toLowerCase(); }
请记住,如果您想要原始表示,请始终使用repr,您将得到您想要的
>>> repr(convert("\"javascript\"\""))
'\'function dosomething () { return "javascript"".toLowerCase(); }\''
或者为了保持透明,在函数中添加repr
>>> def convert(jsstring=''):
return repr('function dosomething () { return %s.toLowerCase(); }' % jsstring)
>>> convert("\"javascript\"\"")
'\'function dosomething () { return "javascript"".toLowerCase(); }\''
使用repr,否则如果字符串包含或,则该字符串将无法工作。例如:
... % repr(jsstring)
未能使用repr也可能是一个通过注入或或其他字符而产生的安全漏洞。如果字符串包含这些字符,则未能使用repr也可能导致javascript失败。尽管如果安全性是一个问题,您也会希望通过适当的转义系统来避免类似文本等内容,或者用base64之类的代码对其进行编码。您希望:
建议的repr不适用于unicode字符串:
jsstring = u"\u1234"
print 'function dosomething () { return %s.toLowerCase(); }' % repr(jsstring)
返回
function dosomething () { return u'\u1234'.toLowerCase(); }
这是无效的javascript。在字符串插值中使用repr:
>>> 'This is a string: %r' % ('python string')
'This is a string: "python string"'
因此,只需在代码中将%s替换为%r即可。repr将为您完成这项工作。什么是python字符串词法?没有那么简单。转换JavaScript\'怎么样。返回值将是“javascript.toLowerCase”;在JavaScription中,这是非法的,应该让他们走上正确的轨道。没有无限的时间。在这里仅使用json进行字符串引用有点过分。@CiroSantilli:json.dumps默认使用确保ascii=True,所以奇怪的Unicode不是问题。