【问题标题】:explode and foreach problems爆炸和foreach问题
【发布时间】:2012-01-02 18:03:46
【问题描述】:

用户在这样的框中输入 URL:

  1. google.net
  2. google.com

然后我尝试验证/检查 URL,所以:

function check_input($data) {
    $data = trim($data);
    $data = mysql_real_escape_string($data);
    return $data;
}

验证后:

$flr_array = explode("\n", $flr_post);

所以,我可以验证每个 URL。但是mysql_real_escape_string 会在 URL 之间找到空格并添加:

<--print_r information-->
google.net\r\ngoogle.com

我的网址应该如下所示:

  1. google.net
  2. google.com

如何删除 \r,因为它会破坏其他所有内容? 有没有更好的方法来验证 URL?

尝试使用str_replace,但没有成功。

【问题讨论】:

    标签: php mysql foreach explode


    【解决方案1】:

    验证 URL 的最佳方法是使用 PHP 的 filter_var()docs 函数,如下所示:

    if( ! filter_var($url, FILTER_VALIDATE_URL))) {
      echo 'BAD URL';
    } else {
      echo 'GOOD_URL';
    }
    

    【讨论】:

    • 哇,我从没听说过这个功能。触摸先生!
    • PHP 的过滤功能将改变你的生活!
    【解决方案2】:

    这就是单引号和双引号之间的区别所在:

    $flr_array = explode('\r\n', $flr_post);
    

    【讨论】:

      【解决方案3】:

      改用 preg_split,

      $parts = preg_split('/[\n\r]+/', $data);
      

      只要有一个或多个 \n 或 \r,就会分裂。

      你在做什么 mysql_real_escape_string ?这是以后用于数据库的吗?在进行其他处理之前不要进行转义。该处理可能会破坏 m_r_e_s() 的转义,并且仍然使您容易受到 sql 注入的攻击。

      m_r_e_s() 必须是您在将字符串用于 sql 查询字符串之前对字符串执行的最后一件事。

      【讨论】:

      • 并使用PDO预处理语句进一步避免sql注入。
      【解决方案4】:

      您应该使用正则表达式来验证 $flr_array 中的 URL。

      使用preg_match(),如果匹配,它将用结果填充$matches 变量(如果您在函数调用中提供了它)。这就是 php.net 不得不说的:

      "如果提供了匹配项,则填充搜索结果。$matches[0] 将包含匹配完整模式的文本,$matches1 将包含匹配第一个捕获的带括号的子模式的文本, 等等。”

      【讨论】:

        【解决方案5】:

        您可以使用:nl2br() — 在字符串中的所有换行符之前插入 HTML 换行符

        例子:

        <?php
            echo nl2br("Welcome\r\nThis is my HTML document");
        ?>
        

        输出:

        Welcome<br />
        This is my HTML document
        

        来源:http://php.net/manual/en/function.nl2br.php

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-21
          • 2015-04-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多