9

我有一个 php 文件,用于在 Facebook 和 Twitter 上分享我的用户的帖子。例如,如果我单击 Twitter 图标,我会看到一个屏幕,其中会自动写入指向我网站的超链接。这很好,但我喜欢删除www.自动显示在 Twitter 屏幕上的部分 url。我想这与location.host有关,所以我用谷歌搜索,但我找不到这个问题的正确答案。

这是我的代码示例:

function e(f,i,an)
{
        with(document)
        {
                write('<div style="width:100%"><table id=m'+i+' style="visibility:hidden"><tr>');
                write('<td id="vst' + i + '" style="white-space:nowrap">&nbsp;</td>');
                write('<td hr(this.childNodes[0])" title="share on facebook"><a href="javascript:od(\'http://www.facebook.com/sharer.php?u=' + location.host + '/e/'+ i +'\',900,400)" class=icon><img src="images/facebook.png" target="_blank"></a></td>');
        write('<td hr(this.childNodes[0])" title="share on twitter"><a href="javascript:od(\'http://twitter.com/home?status=' + location.host + '/e/'+ i +' - %20read!\',800,600)" class=icon><img src="images/twitter.png" target="_blank"></a></td>');
                write('<td class=ei><a name="cid'+i+'"></a><a href="e/'+i+'">( #'+i+' )</a></td>'); 

                  document.write('<td>&nbsp;</td>');

我的第二个问题是:如何在 Twitter 屏幕上添加自定义标题:例如,我的网站名称无需使用 location.host 以及正在共享的 TOPICNAME 的标题?

4

5 回答 5

14

对于您的第一个...您可以修改主机:

location.host.replace('www.','')

编辑:解决问题

再次被否决,并在第一条评论上看到很多赞成票,我将尝试解决对子域的担忧,除了www包含www...

仍然为这个解决方案避开正则表达式,主要是因为通常很难维护正则表达式,而且有很多开发人员根本不接触正则表达式......

var cleaned_host;
if(location.host.indexOf('www.') === 0){
    cleaned_host = location.host.replace('www.','');
}
// do something with `cleaned_host`

......或者更简洁......

location.host.indexOf('www.') && location.host || location.host.replace('www.', '');
// evaluates to hostname with starting `www.` removed
于 2012-09-22T12:31:36.540 回答
12

如果您只想获得二级和顶级域,而不是任何子域,这应该可以帮助您:

var url = location.host; // e.g. "www.example.com"
return url.split(".").slice(-2).join("."); // "example.com"

这也适用于其他子域,甚至超过三级域。

于 2012-09-22T12:48:34.000 回答
2

location.host.replace('http://www.','')

或(如果您想保留 http://)

location.host.replace('http://www.','http://')

它确保您只替换 www 如果它在开头。

于 2012-09-22T12:34:54.120 回答
0

删除所有各种 www。火柴


如果您需要删除www. w。ww。二战。依此类推,下面的代码可能会变得很方便。

Javascript

var searchPattern = "^w+\\d*\\." ;
var rx = new RegExp( searchPattern, "gim" ) ;
var replacePattern = "" ;
var replacedText = sourceText.replace( rx, replacePattern ) ;

PHP

preg_replace( '|(?mi-Us)^w+\\d*\\.|D', '', $sourceText, $limit, $count) ;
于 2015-10-21T12:57:27.103 回答
0

当前接受的答案坚持不使用正则表达式,这意味着它不涵盖评论中描述的某些情况。

但这是一个无正则表达式的解决方案,应该涵盖所有内容。我也hostname用过host

function thedomain(domain) {
  var subdomain = 'www.', subdomain_len = subdomain.length;
  if (domain.substr(subdomain, subdomain_len) == subdomain)
    domain = domain.substring(subdomain_len)
  return domain;
}
console.log(thedomain(location.hostname)); // Strips www if needed
console.log(thedomain('www.foobar.com')); // Strips www      
console.log(thedomain('wwww.foobar.com')); // Does NOT strip www
console.log(thedomain('prefix.www.foobar.com')); // Does NOT strip www

于 2020-10-17T10:56:33.680 回答