Python 将 str 转换为 JavaScript 文字字符串
python convert str to javascript literal string
我想使用 python 动态生成 JavaScript 代码。
def convert(jsstring=''):
return 'function dosomething () { return %s.toLowerCase(); }' % jsstring
问题是jsstring
是一个python字符串。
如何将其转换回 javascript 字符串文字以dosomething
有效的 javascript 函数?
例如
叫
convert("javascript")
现在输出
function dosomething () { return javascript.toLowerCase(); }
这不是一个有效的JavaScript函数
预期产出
function dosomething () { return "javascript".toLowerCase(); }
另一个例子,调用
convert("javascript''")
预期产出
function dosomething () { return "javascript''".toLowerCase(); }
多谢。
你想要 json:
import json
jsstring = """
foo "bar"
"""
print 'function dosomething () { return %s.toLowerCase(); }' % json.dumps(jsstring)
建议的repr
不适用于 unicode 字符串:
jsstring = u"'u1234"
print 'function dosomething () { return %s.toLowerCase(); }' % repr(jsstring)
返回
function dosomething () { return u''u1234'.toLowerCase(); }
这不是有效的JavaScript。
如何在%s
周围添加适当的引号,即:
'function dosomething () { return "%s".toLowerCase(); }' % jsstring
下面是一个命令行会话来阐明差异:
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
设置的变量。
您很可能想要一个字符串文字:
def convert(jsstring=''):
return 'function dosomething () { return "%s".toLowerCase(); }' % jsstring
当然,如果jsstring
包含引号、换行符和其他敏感字符,您需要确保不会出现任何问题。我就交给你了。
在字符串内插中使用 repr:
>>> 'This is a string: %r' % ('python string')
'This is a string: "python string"'
因此,只需在代码中将 %s 替换为 %r。 repr()
会为您完成这项工作。
使用 repr
,否则如果字符串包含 " 或 ',则字符串将不起作用。例如:
... % repr(jsstring)
不使用repr
也可能是一个安全漏洞(通过注入"或"或其他字符)。如果您的字符串包含这些字符,则无法使用repr
也可能导致您的 javascript 失败。虽然如果安全性是一个问题,你也会希望避免像</script>
这样的文本,以及其他东西,通过一个适当的转义系统,或者用base64之类的东西编码它。
你最好适当地引用字符串,无论你传递给函数什么。这将使事情变得简单
对于提到的示例
>>> 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(); }'''
- 高于 U+FFFF 的字符的 Javascript 文字
- Javascript 文字对象和单例模式
- Python 将 str 转换为 JavaScript 文字字符串
- 如何在 PHP 中将 JavaScript 文字对象转换为 Json 对象
- C#中的javascript文字-避免警告
- Javascript文字函数
- 使用JavaScript[]文字的数组的长度是否真正反映了其在内存中的物理大小
- 为什么javascript文字与非文字对应物的作用不同
- 我需要一个Javascript文字语法转换器/deobfusation工具
- Javascript文字处理器/编辑器(或Google Docs架构)
- 对象数组的 Javascript 文字表示法
- JavaScript文字,键的指针值
- Javascript文字游戏
- 在JavaScript文字中使用变量作为属性名
- Javascript文字转义在IE,但不是Firefox, Chrome或Safari
- Javascript文字游戏如何使函数不替换元素
- Javascript文字vs函数oop
- ASP.NET Razor与javascript文字的混合
- Google Charts Javascript 文字数据表示法给出“Not a array”错误
- Javascript文字嵌套对象-参考顶层属性