你知道如何解决下一个问题吗? 为此,请访问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 :(得分:0)
如果href不包含协议,例如http://
,则假定它是相对路径。我们的想法是,您可以拥有/logout
的链接,而无需引用主机名。当您在没有协议的情况下链接到tsarevo-zaimishe-sosh.edusite.ru
时,它仍然被解释为相对链接。
因此,鉴于您必须在链接中包含http://
,您可以通过数据库整理那些拥有它的数据库,也可以编写显示代码以便检查{{1}已经存在并且如果不存在则添加它。
答案 1 :(得分:0)
我相信你回答了自己的问题。如果您可以添加http://并解决问题,那么为什么不这样做呢?
答案 2 :(得分:0)
您的评估是正确的,您应该将http://
添加到链接的开头,否则它将被视为相对而非绝对。
由于您使用的是PHP,因此您可以轻松检查您的链接是否确实以http://
开头,如果没有,则将其添加到链接中!
检查How to check if a string starts with a specified string?,了解如何检查字符串是否以http://
开头,并将其添加到.
(点)运算符之前。祝你好运!
答案 3 :(得分:0)
您可以运行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 );
}