NSAttributedString到不带CSS的HTML字符串
我正在尝试将HTML转换为NSAttributedString格式并返回。从HTML转换工作正常,但是转换回HTML会给我一种无法发送到后端的格式:NSAttributedString到不带CSS的HTML字符串,html,ios,uiwebview,nsattributedstring,Html,Ios,Uiwebview,Nsattributedstring,我正在尝试将HTML转换为NSAttributedString格式并返回。从HTML转换工作正常,但是转换回HTML会给我一种无法发送到后端的格式: <!DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html
<!DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv=Content-Style-Type" content="text/css">
<title></title>
<meta name="Generator" content="Cocoa HTML Writer">
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 15.0px; font: 16.0px 'Times New Roman'; color: #000000; -webkit-text-stroke: #000000}
span.s1 {font-family: 'Times New Roman'; font-weight: normal; font-style: normal; font-size: 16.00pt; font-kerning: none}
span.s2 {font-family: 'TimesNewRomanPS-BoldMT'; font-weight: bold; font-style: normal; font-size: 16.00pt; font-kerning: none}
span.s3 {font-family: 'TimesNewRomanPS-ItalicMT'; font-weight: normal; font-style: italic; font-size: 16.00pt; font-kerning: none}
span.s4 {font-family: 'TimesNewRomanPS-BoldItalicMT'; font-weight: bold; font-style: italic; font-size: 16.00pt; font-kerning: none}
</style>
</head>
<body>
<p class="p1"><span class="s1">vanlig text </span><span class="s2">bold</span><span class="s1"> </span><span class="s3">italic</span><span class="s1"> </span><span class="s4">bold_italic asd</span></p>
</body>
</html>
我没有用于解决它的确切代码,但我通过迭代nsfontattributes并手动添加支持的html标记来解决它。NSAttributedString扩展中的类似内容:
enumerateAttribute(NSFontAttributeName, inRange: NSMakeRange(0, length), options: NSAttributedStringEnumerationOptions(rawValue: 0)) { (value, range, stop) in
if let font = value as? UIFont {
var stringInRange = string.substringInRange(range)
if font.isBold {
stringInRange = "<b>\(stringInRange)</b>"
}
if font.isItalic {
stringInRange = "<i>\(stringInRange)</i>"
}
// ...
}
}
EnumeratAttribute(NSFontAttributeName,inRange:NSMakeRange(0,长度),选项:NSAttributedStringEnumerationOptions(rawValue:0)){(值,范围,停止)在
如果让font=值为?UIFont{
var stringInRange=string.substringInRange(范围)
如果font.isBold{
stringInRange=“\(stringInRange)”
}
如果font.isItalic{
stringInRange=“\(stringInRange)”
}
// ...
}
}
我有一个很好的方法将NSAttributedString转换为HTML字符串,而不使用CSS
[webView loadHTMLString:[yourAttributedString stringByReplacingOccurrencesOfString:@"\n" withString:@"<br/>"] baseURL:nil];
NSString *strExclusion = [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"];
1) 采用UIWebView和UITextView
[webView loadHTMLString:[yourAttributedString stringByReplacingOccurrencesOfString:@"\n" withString:@"<br/>"] baseURL:nil];
NSString *strExclusion = [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"];
2) 在网络视图中设置属性字符串
[webView loadHTMLString:[yourAttributedString stringByReplacingOccurrencesOfString:@"\n" withString:@"<br/>"] baseURL:nil];
NSString *strExclusion = [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"];
检查此链接。我希望这对我们有帮助。我不明白这有什么关系。它只修复了空白,这不是我们的问题。问题:您的服务器可以准确地管理哪些标记?因为在您的示例中,您给出了“simples one”:
等。
如果它只是“受限于”,您可以枚举具有有效范围的属性,只需添加自己的标记,并且在必要时不要忘记添加“开始”
和相应的结束。是的。我几乎解决了这个问题,我正按照你建议的方式去做。我完成后将在这里发布我使用的代码。你能做到吗?但如果有复杂的html呢?也许我在问题中没有具体说明,但该应用程序只支持有限数量的html功能,如粗体、斜体、编号列表和项目符号列表。