【问题标题】:How to add text in case is missing to echo $_GET [duplicate]如何在缺少回显 $_GET 的情况下添加文本 [重复]
【发布时间】:2012-12-06 14:13:57
【问题描述】:

可能重复:
Add http:// prefix to URL when missing

我正在使用这样的代码:

<?php echo $_GET['i']; ?>

myweb.com/sample.php?i=http://sample.com

但我想确保它始终有http://,以防万一这是提供myweb.com/sample.php?i=sample.com

如何使此代码 &lt;?php echo $_GET['i']; ?&gt; 确保始终添加 http:// 以防万一丢失?

【问题讨论】:

  • 检查 $_GET 是否不为空或为空..如果为空添加 http:// 否则处理它

标签: php javascript get


【解决方案1】:

你可以检查你的 $_GET['i'] 并且只接受 http:

例如:

'http://' 包含 7 个字符 + 最小 url 'w.xx' 包含 4 个字符

因此,您的 $_GET[i] 的最小长度为 11 个字符

if(!empty($_GET['i']))
{

    $len = strlen($_GET['i']);
    if($len > 10 and  substr($_GET['i'], 0, 7) === 'http://')
    {     
        [... some of your code ?]
    }
    else if ($len > 3)
    {

        //force add http://
        $_GET['i'] = 'http://'.$_GET['i'];
     }

     unset($len);
}
else
{
    $_GET['i'] = 'No url?';
}

// <-- Place for your echo

【讨论】:

  • 您没有正确检查 url 是否有效。您应该检查一个“。” (点)和有效top level domain。但是如果这个回显是要在某些公司内网中使用,那么只能使用主机名来链接som网页host/1(就像localhost/index.php一样)
  • 是的,如果此 $_GET 用于安全连接,则此脚本与 XSS 相比不安全 :)。但是这个问题是关于,如何添加http。在 XSS 攻击、有效域长度、接受的字符......和其他之前,z $_GET['i'] 的安全性不高。
【解决方案2】:

这样使用:

<?php
    if (strpos("http://", $_GET['i']) !== 0)
        $_GET['i'] = "http://" . $_GET['i'];
?>

或作为回声语句:

echo (strpos("http://", $_GET['i']) !== 0) ? "http://" . $_GET['i'] : $_GET['i'];

【讨论】:

  • @VisioN 已更改。请检查!
  • 然而,改变超全局变量并不是最好的主意,现在strpos 可以正确使用了。
  • @VisioN 是的,就是这个原因,我给了第二个选项!
  • 在第二个选项中你有奇怪的任务。
  • 第二个选项没有任何分配。它只是一个回声!我的错。已编辑。
【解决方案3】:

如果您在查询字符串中动态生成上述 http url,请使用 php 中的 urlencode 或 rawurlencode 函数将查询字符串连接到您的 url,然后使用 http get ($_GET['i']) 接受请求.

希望它对你有用。

【讨论】:

    【解决方案4】:

    使用 stristr() 函数。

    $url = stristr($_GET['i'],'http://');
    if($url != '')
    

    那么字符串包含'http'。

    【讨论】:

      猜你喜欢
      • 2016-10-11
      • 1970-01-01
      • 1970-01-01
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 2016-06-02
      相关资源
      最近更新 更多