如何将 Wiki Table 转换为 Link?
How To Convert A Wiki Table To A Link?
以下 HTML 代码显示一个 table,它是另一个站点的 link。也就是说,单击内部 table(即使是白色 space)中的任何像素都会调用 link。我如何使用管道语法在 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>
此 table-in-a-table 的管道语法如下所示(但没有 ... )
{| 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 代码中 ... 的效果?
简而言之:您可以使用 MediaWiki 的外部 link 语法和单行 HTML table 来做到这一点,但如果您启用了 HTML整理。
MediaWiki links
在 MediaWiki 中,默认设置是禁止在 wiki 文本中使用 <a>...</a>
标签。这是出于安全原因:如果您的 wiki 是公开的 editable 并且 <a>...</a>
标签被允许未选中,任何人都可以通过添加 link 之类的方式向您的站点添加任意 JavaScript <a onmouseover="alert(1)">foo</a>
.
相反,您可以通过两种不同的方式将 links 添加到维基文本。对于同一 wiki 上其他页面的内部 link,您可以使用 [[Page name|display text]]
,它会生成类似 <a href="/wiki/Page_name" class="mw-redirect" title="Page name">display text</a>
的内容。对于外部 links,您使用 [http://www.example.com Example]
,它会生成 link,例如 <a rel="nofollow" class="external text" href="http://www.example.com">Example</a>
。
出于当时可能非常充分的理由,您可以将换行符插入到内部 link 的显示文本中,但不能插入外部 link 的显示文本中。所以这会产生一个有效的 link:
[[Page name|display
text]]
但这只是按原样输出(URL 本身 linked):
[http://www.example.com display
text]
这对以后很重要。
MediaWiki tables
虽然 MediaWiki 不允许在维基文本中使用 <a>...</a>
标签,但它允许 HTML 标签的子集。这包括 <table>
、<tr>
、<th>
和 <td>
,这意味着实际上有两种方法可以在维基文本中生成 table。第一种是使用 wikitext table 语法,就像您在问题中所做的那样:
{|
| Row 1, cell 1
| Row 1, cell 2
|-
| Row 2, cell 1
| Row 2, cell 2
|}
第二个是使用 HTML table 个元素:
<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 table 语法,您需要添加换行符以使 table 正确呈现。但是,对于 HTML table 标签,您可以在一行中完成所有操作,例如 <table><tr><td>Foo</td></tr></table>
.
如何将 tables 放入 links
在 MediaWiki 中将 table 放入 link 就是将适当的 table 语法放入适当的 link 语法中。如果您的 link 是内部 link,您可以选择 table 语法之一:
[[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>
如果你的 link 是外部的,那么因为外部的 link 语法不接受换行符,你只能使用 HTML table 标签.
[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>]
|}
为什么您可能不想这样做
虽然在 links 中放置 table 标签在 HTML 5 中是允许的,但在 HTML 4.01 或 XHTML 1.0 中是不允许的。当我用 W3C validator 测试你的 HTML 时,它给了我错误 'document type does not allow element "table" here'.
我相信较新版本的 MediaWiki 使用 HTML 5,因此这本身可能不是错误。但是,如果您的 wiki 使用 HTML 整理软件,那么 link 中的 table 可能会被解释为损坏的 HTML,而对您而言 "fixed"。当我在维基百科上测试上述代码时,我认为它目前使用 HTML 5 整理算法,link 在 之前 table 呈现。
<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>
所以,如果你真的想这样做,那就去做吧,但要注意可能会有陷阱。
最后一件事:如果你想在 wiki 文本中使用 <a>
标签,可以启用 $wgRawHtml 选项。但是,如果您的 wiki 是公开编辑的,不要这样做!table!它将使人们能够随机添加 JavaScript 到您的网站,这不是一个好主意。
以下 HTML 代码显示一个 table,它是另一个站点的 link。也就是说,单击内部 table(即使是白色 space)中的任何像素都会调用 link。我如何使用管道语法在 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>
此 table-in-a-table 的管道语法如下所示(但没有 ... )
{| 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 代码中 ... 的效果?
简而言之:您可以使用 MediaWiki 的外部 link 语法和单行 HTML table 来做到这一点,但如果您启用了 HTML整理。
MediaWiki links
在 MediaWiki 中,默认设置是禁止在 wiki 文本中使用 <a>...</a>
标签。这是出于安全原因:如果您的 wiki 是公开的 editable 并且 <a>...</a>
标签被允许未选中,任何人都可以通过添加 link 之类的方式向您的站点添加任意 JavaScript <a onmouseover="alert(1)">foo</a>
.
相反,您可以通过两种不同的方式将 links 添加到维基文本。对于同一 wiki 上其他页面的内部 link,您可以使用 [[Page name|display text]]
,它会生成类似 <a href="/wiki/Page_name" class="mw-redirect" title="Page name">display text</a>
的内容。对于外部 links,您使用 [http://www.example.com Example]
,它会生成 link,例如 <a rel="nofollow" class="external text" href="http://www.example.com">Example</a>
。
出于当时可能非常充分的理由,您可以将换行符插入到内部 link 的显示文本中,但不能插入外部 link 的显示文本中。所以这会产生一个有效的 link:
[[Page name|display
text]]
但这只是按原样输出(URL 本身 linked):
[http://www.example.com display
text]
这对以后很重要。
MediaWiki tables
虽然 MediaWiki 不允许在维基文本中使用 <a>...</a>
标签,但它允许 HTML 标签的子集。这包括 <table>
、<tr>
、<th>
和 <td>
,这意味着实际上有两种方法可以在维基文本中生成 table。第一种是使用 wikitext table 语法,就像您在问题中所做的那样:
{|
| Row 1, cell 1
| Row 1, cell 2
|-
| Row 2, cell 1
| Row 2, cell 2
|}
第二个是使用 HTML table 个元素:
<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 table 语法,您需要添加换行符以使 table 正确呈现。但是,对于 HTML table 标签,您可以在一行中完成所有操作,例如 <table><tr><td>Foo</td></tr></table>
.
如何将 tables 放入 links
在 MediaWiki 中将 table 放入 link 就是将适当的 table 语法放入适当的 link 语法中。如果您的 link 是内部 link,您可以选择 table 语法之一:
[[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>
如果你的 link 是外部的,那么因为外部的 link 语法不接受换行符,你只能使用 HTML table 标签.
[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>]
|}
为什么您可能不想这样做
虽然在 links 中放置 table 标签在 HTML 5 中是允许的,但在 HTML 4.01 或 XHTML 1.0 中是不允许的。当我用 W3C validator 测试你的 HTML 时,它给了我错误 'document type does not allow element "table" here'.
我相信较新版本的 MediaWiki 使用 HTML 5,因此这本身可能不是错误。但是,如果您的 wiki 使用 HTML 整理软件,那么 link 中的 table 可能会被解释为损坏的 HTML,而对您而言 "fixed"。当我在维基百科上测试上述代码时,我认为它目前使用 HTML 5 整理算法,link 在 之前 table 呈现。
<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>
所以,如果你真的想这样做,那就去做吧,但要注意可能会有陷阱。
最后一件事:如果你想在 wiki 文本中使用 <a>
标签,可以启用 $wgRawHtml 选项。但是,如果您的 wiki 是公开编辑的,不要这样做!table!它将使人们能够随机添加 JavaScript 到您的网站,这不是一个好主意。