以下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>
此表中的管道语法如下所示(但没有&lt; a href =&#34; ...&#34;&gt; ...&lt; / a&gt;)
{| 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
|}
|}
如何实现&lt; a href =&#34; ...&#34;&gt;的效果? ......&lt; / a&gt;如上面的HTML代码?
答案 0 :(得分:2)
简而言之:您可以使用MediaWiki的外部链接语法和单行HTML表格执行此操作,但如果您启用了HTML整理,则无法使用。
在MediaWiki中,默认设置是禁用wiki文本中的<a>...</a>
标记。这是出于安全原因:如果您的维基是可公开编辑的,并且未选中<a>...</a>
标记,则任何人都可以通过添加<a onmouseover="alert(1)">foo</a>
等链接为您的网站添加任意JavaScript。
相反,您可以通过两种不同的方式添加指向wikitext的链接。对于同一维基上其他页面的内部链接,您使用[[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不允许在wiki文本中使用<a>...</a>
标记,但它确实允许HTML标记的子集。这包括<table>
,<tr>
,<th>
和<td>
,这意味着实际上有两种方法可以在wikitext中创建表格。第一种是使用wiki文本表语法,就像你在问题中所做的那样:
{|
| 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>
对于wiki文本表语法,您需要为表格添加换行符以正确呈现。但是,对于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中允许在链接中放置表标记,但HTML 4.01或XHTML 1.0中不允许使用它。当我使用W3C validator测试您的HTML时,它给了我错误'文档类型不允许元素“表”此处“。
我相信MediaWiki的更新版本使用HTML 5,因此这本身可能不是错误。但是,如果您的wiki使用HTML整理软件,那么链接中的表可能会被解释为损坏的HTML,并为您“修复”。当我在维基百科上测试上面的代码时,我认为目前使用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,这不是一个好主意。