2011-03-10 17 views
3

我已經創建了一個portlet產品來綁定外部聊天系統。我使用一個帶WYSIWYGWidget(和其他)和portal_properties的configlet來保存一些屬性。在Plone python腳本中轉義的字符串

什麼給我一個問題是,我將這些屬性值傳遞給auto_popup.js.pt並讓JavaScript創建一個延時彈出式窗口,其中所見即所得Widget的內容是彈出窗口的文本,但如果有換行符在標籤之間的WYSIWYGWidget的html中,它會導致我的javascript中出現錯誤。我可以簡單地通過轉到portal_properties並手動刪除換行符(它顯示爲字符串字段中的空格)來解決這個問題,但這不是重點。

我一直在使用的解決方案是使用python腳本將html屬性字段(已轉義)轉換爲標準html &也刪除換行符。腳本調用完美,腳本在測試中完美工作,但由於某種原因,它在從portal_properties調用特定對象時不起作用。

在下面的代碼中,我已經評論了我正在用於測試目的的屬性的實際值。當在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 
+3

這聽起來像你對我不是從portal_properties讓你在想什麼你越來越。使用'repr(chatMessage)'調用將該值轉換爲python表示形式,以準確檢查所獲得的結果。還要考慮到Zope/Plone中的大多數地方都會自動轉義HTML。 – 2011-03-10 20:59:13

+0

repr()肯定有幫助,有一個r轉義字符,我沒有料到,它意識到它在那裏是一個簡單的修復。非常感謝您的洞察力 – keiththomps 2011-03-11 03:44:20

+0

看起來您正遇到Windows和Unix行終止符之間的差異。 – Auspex 2011-03-13 14:20:22

回答

1

使用urllib.quote()和urllib.unquote()來自動替換轉義序列

+0

你不能使用pythonscript的urllib而不會破解你的zope安裝(不是一個很大的交易,但不是開箱即用的) – 2012-05-19 16:27:41

1

嘗試:

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