下面的HTML代码显示一个表,该表是另一个站点的链接。也就是说,单击内表中的任何像素(甚至是空白)都会调用链接。如何使用管道语法在Wiki中对其进行编码?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>How To Convert A Wiki Table To A Link?</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<table border="1" cellspacing="0" cellpadding="0" width="20%" style="border-collapse: collapse;">
<tr>
<td>
<a href="http://google.com">
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td style="text-align: left;">M pigeons</td>
<td style="text-align: right;">000</td>
</tr>
<tr>
<td colspan="2">into N holes</td>
</tr>
</table>
</a>
</td>
</tr>
</table>
</body></html>
这个表中表的管道语法看起来是这样的(但是没有.)
{| border="1" cellspacing="0" cellpadding="0" width="20%" style="border-collapse: collapse;"
|
{| border="0" cellpadding="0" cellspacing="0" width="100%"
|-
|style="text-align: left;"|M pigeons
|style="text-align: right;"|000
|-
|colspan="2"|into N holes
|}
|}
我怎样才能达到.就像上面的HTML代码一样?
发布于 2017-05-16 11:00:28
简单地说,您可以使用MediaWiki的外部链接语法和单行HTML表来完成这一任务,但是如果启用了HTML清理功能,它将无法工作。
MediaWiki链接
在MediaWiki中,默认设置是在wikitext中不允许<a>...</a>
标记。这是出于安全原因:如果您的wiki是可公开编辑的,并且允许不选中<a>...</a>
标记,任何人都可以通过添加<a onmouseover="alert(1)">foo</a>
之类的链接向您的站点添加任意JavaScript。
相反,您可以通过两种不同的方式添加到wikitext的链接。对于同一个wiki上其他页面的内部链接,可以使用[[Page name|display text]]
,它生成类似于<a href="/wiki/Page_name" class="mw-redirect" title="Page name">display text</a>
的内容。对于外部链接,使用[http://www.example.com Example]
,它生成类似于<a rel="nofollow" class="external text" href="http://www.example.com">Example</a>
的链接。
出于当时可能非常好的原因,您可以在内部链接的显示文本中插入换行符,但不能插入外部链接。因此,这会产生一个有效的链接:
[[Page name|display
text]]
但这只是输出原样( URL本身链接了):
[http://www.example.com display
text]
这一点稍后将很重要。
MediaWiki表
虽然MediaWiki不允许在wikitext中使用<a>...</a>
标记,但它确实允许一个HTML标记的子集。这包括<table>
、<tr>
、<th>
和<td>
,这意味着在wikitext中实际上有两种制作表的方法。第一种是使用wikitext表语法,就像您在问题中所做的那样:
{|
| Row 1, cell 1
| Row 1, cell 2
|-
| Row 2, cell 1
| Row 2, cell 2
|}
第二种方法是使用HTML表元素:
<table>
<tr>
<td>Row 1, cell 1</td>
<td>Row 1, cell 2</td>
</tr>
<tr>
<td>Row 2, cell 1</td>
<td>Row 2, cell 2</td>
</tr>
</table>
对于wikitext表语法,需要为表添加换行符才能正确呈现。但是,对于HTML标记,可以在一行上完成所有操作,比如<table><tr><td>Foo</td></tr></table>
。
如何将表放在链接中
在MediaWiki中将表放入链接中是将适当的表语法放在适当的链接语法中的问题。如果您的链接是内部链接,则可以选择下列任一表语法:
[[Page name|
{|
| Foo
|}
]]
[[Page name|
<table>
<tr>
<td>Foo</td>
</tr>
</table>
]]
它们都会产生类似于以下HTML的内容:
<a href="/wiki/Page_name" class="mw-redirect" title="Page name">
<table>
<tr>
<td>Foo</td>
</tr>
</table>
</a>
如果您的链接是外部链接,那么由于外部链接语法不接受换行符,所以您只能使用HTML表标记。
[http://www.example.com <table><tr><td>Foo</td></tr></table>]
这将产生类似于以下HTML的内容:
<a rel="nofollow" class="external text" href="http://www.example.com">
<table>
<tr>
<td>Foo</td>
</tr>
</table>
</a>
在您的示例中,下面的代码应该执行您想要做的事情:
{| border="1" cellspacing="0" cellpadding="0" width="20%" style="border-collapse: collapse;"
| [http://www.google.com <table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td style="text-align: left;">M pigeons</td><td style="text-align: right;">000</td></tr><tr><td colspan="2">into N holes</td></tr></table>]
|}
你为什么不想这么做
虽然HTML 5中允许在链接中放置表标记,但HTML4.01或XHTML1.0不允许这样做。当我用W3C validator测试你的HTML时,它给了我错误‘文档类型不允许元素“在这里。
我相信最近版本的MediaWiki使用HTML5,所以这本身并不是一个错误。但是,如果您的wiki使用HTML整理软件,那么链接中的表可能会被解释为已损坏的HTML,并为您“修复”。当我在Wikipedia上测试上面的代码时(我认为目前使用的是HTML 5清理算法),链接被呈现在表之前。
<table border="1" cellspacing="0" cellpadding="0" width="20%" style="border-collapse: collapse;">
<tr>
<td><a rel="nofollow" class="external text" href="http://www.google.com"></a>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td style="text-align: left;">M pigeons</td>
<td style="text-align: right;">000</td>
</tr>
<tr>
<td colspan="2">into N holes</td>
</tr>
</table>
</td>
</tr>
</table>
所以,如果你真的想这么做,那就去做吧,但要小心,可能会有陷阱。
最后一件事:如果您想在wikitext中按原样使用<a>
标记,则可以启用$wgRawHtml选项。但是,如果您的wiki是可公开编辑的,则不允许这样做!它将使人们能够添加随机JavaScript到您的网站,这不是一个好主意。
https://stackoverflow.com/questions/43984293
复制相似问题