python将str转换为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

我想使用python动态生成javascript代码

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不是问题。