2014-09-20 117 views
0

你知道如何解决下一个问题吗? 对于这个去请http://11klassniki.ru/school_post.php?id_school=2639并点击链接Официальныйсайт:tsarevo-zaimishe-sosh.edusite.ru,你将被转移到http://11klassniki.ru/tsarevo-zaimishe-sosh.edusite.ru。 我不知道为什么,但链接从主站点开始。另一个网站的链接从主网站开始

如果我要改变数据库中的链接并添加“http://”我没有造成任何问题。

当然,我可以添加的 “http://” 下一代码:

if (!empty($myrow_vuz ['site'])) { 
printf ("<p class='town'>Official site: <span class='town_name'> 
<noindex><a href='%s' target = '_blank' rel='nofollow'>%s</a></noindex></span></p>" 
, $myrow_vuz["site"], $myrow_vuz["site"]); 
} 

但是我有数据库,从http:开头许多环节://了。

回答

0

如果一个href不包含一个协议,如http://,它被认为是一个相对路径。这个想法是,您可以链接到/logout而不必引用主机名。当你没有协议链接到tsarevo-zaimishe-sosh.edusite.ru时,它仍然被解释为相对链接。

所以,因为你必须在你的链接http://,你可以通过你的数据库整理是有它的那些,或使其检查http://是否已经存在,并增加了其写入你的显示代码如果不是。

0

我相信你回答了你自己的问题。如果您可以添加http://并解决问题,那么为什么不这样做呢?

1

你的评价是正确的,你应该添加http://到你的链接的开始,否则它将被视为相对而不是绝对。

由于您使用的是PHP,因此您可以轻松检查您的链接是否确实以http://开头,如果不是,请将其添加到链接!

检查How to check if a string starts with a specified string?了解如何检查您的字符串是否以http://开头,并用.(点)运算符作为前缀。祝你好运!

1

您可以运行preg_match来检查http://或https://的实例,并在它们不在时添加它们。但是,清理解决方案始终包含所有已保存链接开头的http://仍将被推荐。

$site = "http://mywebsite.com"; 
// For replacement of your code, you may remove the line above and uncomment the one below. 
//$site = $myrow_vuz ['site']; 

if (! empty ($site)) { 
    $site = (preg_match ("/(^http:\/\/)|(^https:\/\/)/", $site)) ? $site : "http://" . $site; 
    printf ("<p class='town'>Official site: <span class='town_name'><noindex><a href='%s' target = '_blank' rel='nofollow'>%s</a></noindex></span></p>", $site, $site); 
} 
+1

非常感谢。有用! – user3871018 2014-09-20 18:53:27

+0

你应该把这个问题标记为回答,这样来自其他人的时间不会去解决这个问题。 – Baldvin 2014-09-20 20:08:42