我的目标是使用提供的REST API在汇总维基中创建一个包含表的页面,在创建页面后,可以使用WYSIWYG编辑器轻松编辑维基用户。
我拆开了文本并将不同的类别放入一个数组数组中,然后从中生成一个html表(一个字符串),效果很好。
然而,将此原始html表(在$ htmlTable中)作为内容发布到REST API
$data = array("type" => "page", "title" => someTitle,
"space" => array("key" => "$uploadSpace"),
"body" => array("storage" => array("value" => "$htmlTable", "representation" => "storage")));
返回400 statusCode错误。显然因为使用htmlspecialchars
将字符串编码为html而没有正确转义输入,但是如何创建一个转换为html表的结构化输入呢?
我试图通过confluence宏传递我的html表,该宏将html输入呈现为一个表格供查看:
$data = array("type" => "page", "title" => someTitle,
"space" => array("key" => "$uploadSpace"),
"body" => array("storage" => array("value" => "<ac:structured-macro ac:name=\"html\"><ac:plain-text-body><![CDATA[$htmlTable]]></ac:plain-text-body></ac:structured-macro>", "representation" => "storage")));
这会在页面上呈现我的html表格,但是这在WYSIWYG要求中很容易编辑,因为wiki的用户之后会看到宏中包含的html代码。
非常感谢你。
答案 0 :(得分:0)
您需要修改表格以使用Confluence Wiki Markup标记表格。例如,html表:
$data = "||First Name||Last Name||GPA||
|Bob|Jones|3.52|
|Fred|Smith|2.89|";
应写成:
$data = array("type" => "page", "title" => someTitle,
"space" => array("key" => "$uploadSpace"),
"body" => array("**wiki**" => array("value" => "$htmlTable", "representation" => "**wiki**")));
然后,当您通过REST进行更新/插入时,将“表示”从“存储”更改为“维基”。 (并删除html宏包装器)
ScaleToFill
这将为您提供原生的,所见即所符的Confluence表。
“存储”表示表明正文测试已经转换为Confluence在内部用于存储内容的格式。您想使用'wiki'插入,并让Confluence为您处理任何转换。
答案 1 :(得分:0)
经过长时间的斗争,找到了修复。
在您的HTML内容中添加宏代码。
$bodyFormatted = '<ac:structured-macro ac:name="html"><ac:plain-text-body><![CDATA['.$bodyFormatted.']]></ac:plain-text-body></ac:structured-macro>';
$ bodyFormatted变量保存HTML内容。
$data['type'] = 'page';
$data['title'] = $articleData["title"].time();
$data['space']['key'] = $articleData["container"];
$data['body']['storage']['value'] = $bodyFormatted;
$data['body']['storage']['representation'] = 'storage';
编码到json并通过REST传递。在那个重要的过程之前,我失败了。
尽管有警告,请启用上述模块(html(html-xhtml))
处理您的API调用,现在检查内容。希望你完成。完成工作后,禁用模块,以防止交叉脚本攻击。