使用Confluence REST API发布生成的html表(PHP)而不获取http 400状态代码?

时间:2015-06-18 05:43:51

标签: php html rest confluence confluence-rest-api

我的目标是使用提供的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代码。

非常感谢你。

2 个答案:

答案 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宏” 参考:https://confluence.atlassian.com/conf55/confluence-user-s-guide/creating-content/using-the-editor/working-with-macros/html-macro

尽管有警告,请启用上述模块(html(html-xhtml))

处理您的API调用,现在检查内容。希望你完成。完成工作后,禁用模块,以防止交叉脚本攻击。