Plone-python脚本中的字符串转义

Plone-python脚本中的字符串转义,python,escaping,plone,Python,Escaping,Plone,我已经创建了一个portlet产品来连接外部聊天系统。我使用带有WYSIWYGWidget(以及其他)和portal_属性的configlet来保存一些属性 给我带来的问题是,我正在将这些属性值传递给auto_popup.js.pt,并让javascript创建一个延时弹出窗口,其中所见即所得的内容是弹出窗口的文本,但是如果标记之间的所见即所得html中有一个换行符,则会导致javascript中出现错误。我可以通过转到portal_属性并手动删除换行符(在字符串字段中显示为空格)来解决这个问题

我已经创建了一个portlet产品来连接外部聊天系统。我使用带有WYSIWYGWidget(以及其他)和portal_属性的configlet来保存一些属性

给我带来的问题是,我正在将这些属性值传递给auto_popup.js.pt,并让javascript创建一个延时弹出窗口,其中所见即所得的内容是弹出窗口的文本,但是如果标记之间的所见即所得html中有一个换行符,则会导致javascript中出现错误。我可以通过转到portal_属性并手动删除换行符(在字符串字段中显示为空格)来解决这个问题,但这不是重点

我一直在使用的解决方案是使用python脚本将属性字段(转义)中的html转换为标准html&同时删除换行符。对脚本的调用在测试中工作得很好,脚本在测试中工作得也很好,但由于某些原因,当它从portal_属性中调用特定对象时,它将无法工作

在下面的代码中,我注释掉了用于测试的属性的实际值。当runas在plone中时,惟一需要执行的replace()是将“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
从Products.CMFCore.utils导入getToolByName
properties=getToolByName(上下文“门户\属性”)
chatMessage=properties.chat\u properties.chat\u消息
#chatMessage=''h2 style=“文本对齐:居中;”欢迎/h2
#h3 style=“text align:center;”您想和基思通话吗?/h3''
chatMessage=chatMessage.replace(“,”>”)
chatMessage=chatMessage.replace(“,”使用urllib.quote()和urllib.unquote()自动替换转义序列

尝试:

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

在我看来,您似乎并没有从门户_属性中获得您认为您正在获得的内容。请使用
repr(chatMessage)
调用将值转换为python表示形式,以准确检查您获得的内容。还应考虑到HTML在Zope/Plone.repr()中的大多数位置都会自动转义确实有帮助,有一个r escape字符,这是我在意识到它存在后没有想到的。这是一个简单的修复方法。非常感谢您的洞察力,看起来您遇到了Windows和Unix行终止符之间的差异。在使用repr()之后上面Martijn Pieters介绍的方法我能够看到换行符escape不是'>\n\r\n如果不破解zope安装,您就无法使用pythonscript中的urllib(不是很大的问题,但不是现成的)