首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将Wiki表转换为链接?

如何将Wiki表转换为链接?
EN

Stack Overflow用户
提问于 2017-05-15 16:14:09
回答 1查看 490关注 0票数 3

下面的HTML代码显示一个表,该表是另一个站点的链接。也就是说,单击内表中的任何像素(甚至是空白)都会调用链接。如何使用管道语法在Wiki中对其进行编码?

代码语言:javascript
运行
复制
<!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>

这个表中表的管道语法看起来是这样的(但是没有.)

代码语言:javascript
运行
复制
{| 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代码一样?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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>的链接。

出于当时可能非常好的原因,您可以在内部链接的显示文本中插入换行符,但不能插入外部链接。因此,这会产生一个有效的链接:

代码语言:javascript
运行
复制
[[Page name|display
text]]

但这只是输出原样( URL本身链接了):

代码语言:javascript
运行
复制
[http://www.example.com display
text]

这一点稍后将很重要。

MediaWiki表

虽然MediaWiki不允许在wikitext中使用<a>...</a>标记,但它确实允许一个HTML标记的子集。这包括<table><tr><th><td>,这意味着在wikitext中实际上有两种制作表的方法。第一种是使用wikitext表语法,就像您在问题中所做的那样:

代码语言:javascript
运行
复制
{|
| Row 1, cell 1
| Row 1, cell 2
|-
| Row 2, cell 1
| Row 2, cell 2
|}

第二种方法是使用HTML表元素:

代码语言:javascript
运行
复制
<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中将表放入链接中是将适当的表语法放在适当的链接语法中的问题。如果您的链接是内部链接,则可以选择下列任一表语法:

代码语言:javascript
运行
复制
[[Page name|
{|
| Foo
|}
]]

[[Page name|
<table>
<tr>
<td>Foo</td>
</tr>
</table>
]]

它们都会产生类似于以下HTML的内容:

代码语言:javascript
运行
复制
<a href="/wiki/Page_name" class="mw-redirect" title="Page name">
    <table>
        <tr>
            <td>Foo</td>
        </tr>
    </table>
</a>

如果您的链接是外部链接,那么由于外部链接语法不接受换行符,所以您只能使用HTML表标记。

代码语言:javascript
运行
复制
[http://www.example.com <table><tr><td>Foo</td></tr></table>]

这将产生类似于以下HTML的内容:

代码语言:javascript
运行
复制
<a rel="nofollow" class="external text" href="http://www.example.com">
    <table>
        <tr>
            <td>Foo</td>
        </tr>
    </table>
</a>

在您的示例中,下面的代码应该执行您想要做的事情:

代码语言:javascript
运行
复制
{| 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清理算法),链接被呈现在表之前。

代码语言:javascript
运行
复制
<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到您的网站,这不是一个好主意。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43984293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档