如何将Wiki表转换为链接?

时间:2017-05-15 16:14:09

标签: hyperlink html-table mediawiki

以下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代码?

1 个答案:

答案 0 :(得分:2)

简而言之:您可以使用MediaWiki的外部链接语法和单行HTML表格执行此操作,但如果您启用了HTML整理,则无法使用。

MediaWiki链接

在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表

虽然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,这不是一个好主意。