Plone Python脚本中的字符串转义

3 投票
2 回答
863 浏览
提问于 2025-04-16 13:27

我创建了一个小工具,用来连接一个外部聊天系统。我使用了一个配置小组件和一个所见即所得的编辑器(WYSIWYGWidget),还有一些门户属性来保存一些设置。

我遇到的问题是,我把这些属性值传递给一个叫auto_popup.js.pt的文件,然后让JavaScript创建一个延迟弹出窗口,弹出窗口的内容是所见即所得编辑器里的文本。但是,如果在所见即所得编辑器的HTML代码中有换行符,它就会导致我的JavaScript出错。我可以通过手动去门户属性中删除换行符(在字符串字段中显示为一个空格)来解决这个问题,但这不是我想要的解决办法。

我正在尝试的解决方案是使用一个Python脚本,把属性字段中的HTML(它是转义过的)转换成标准的HTML,并且去掉换行符。这个脚本在调用时运行得很好,测试也没问题,但不知道为什么在从门户属性中调用特定对象时却不工作。

在下面的代码中,我把我正在处理的属性的实际值注释掉了,方便测试。当在Plone中直接运行时,唯一能成功替换的就是把“welcome”替换成“hello”,但如果使用注释掉的值,整个功能就能正常工作。

如果有任何建议,我将非常感激。

from Products.CMFCore.utils import getToolByName

properties = getToolByName(context, 'portal_properties')
chatMessage = properties.chat_properties.chat_message

# chatMessage = '''<h2 style="text-align: center; ">Welcome</h2>
# <h3 style="text-align: center; ">Would you like to talk to Keith?</h3>'''

chatMessage = chatMessage.replace(">", ">")
chatMessage = chatMessage.replace("&lt;", "<")
chatMessage = chatMessage.replace("&amp;", "&")
chatMessage = chatMessage.replace("> <", "><")
chatMessage = chatMessage.replace('>\n<', '><')
chatMessage = chatMessage.replace('Welcome', 'Hello')

#print chatMessage
return chatMessage

2 个回答

1

尝试一下:

from Products.PythonScripts.standard import url_unquote
chatMessage = url_unquote(properties.chat_properties.chat_message)
1

使用 urllib.quote() 和 urllib.unquote() 可以自动替换那些特殊字符的编码。

撰写回答