Silverstripe将外部URL渲染为相对链接

时间:2017-11-21 03:57:57

标签: php html silverstripe

我遇到SilverStripe将外部网址视为相对链接的问题。

我有一个DataObject:

class Artist extends DataObject {
  private static $db = array(
    'Title' => 'Varchar(255)',
    'Content' => 'HTMLText',
    'Website' => 'Varchar(255)',
  );
}

艺术家网站通过<a href="$Website" target="_blank">呈现。问题是URL被附加到网站的基本URL,因此我们最终会得到:

<a href="mysite.com/www.artistsite.com" target="_blank">

而不是所需的:

<a href="www.artistsite.com" target="_blank">

但是,如果$ Website包含协议(http或https),则链接按预期工作。因此,如果$ Website为http://www.artistsite.com,那么我们得到:

<a href="http://www.artistsite.com" target="_blank">

此网站包含数百个,最终成千上万个客户维护的艺术家记录。理想情况下,客户端可以粘贴URL,而不必担心每个URL都附加http或https。

有人有什么想法吗?这与SilverStripe forums中描述的问题相同,但没有发布任何解决方案。

SilverStripe 3.6上的这个网站。

1 个答案:

答案 0 :(得分:5)

这不是直接的SilverStripe问题。

给出一个包含以下内容的html文档:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<a href="google.com" target="_blank">test</a>
<a href="www.google.com" target="_blank">test</a>

</body>
</html>

所有这些都是作为网站的相对链接打开,而不是外部网址。

请参阅html - links without http protocol

帮助管理员粘贴功能链接是添加onBeforeWrite以测试url是否包含有效协议,如果不包含,则至少自动添加http://。或者使用@wmk自动在评论中建议的模块。