爆炸和预见问题

时间:2012-01-02 18:03:47

标签: php mysql foreach explode

用户在如下框中输入网址:

  1. google.net
  2. google.com
  3. 然后我尝试验证/检查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在网址之间找到空格并添加:

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

    我的网址应如下所示:

    1. google.net
    2. google.com
    3. 如何删除\r,因为它会破坏其他所有内容? 有没有更好的方法来验证网址?

      尝试str_replace,但没有运气。

5 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

改为使用preg_split,

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

那将会分裂到一个或多个\ n或\ r。

你在为mysql_real_escape_string做什么?这是用于以后的数据库吗?在进行其他处理之前,请勿进行转义。该处理可以打破转义的m_r_e_s(),并且仍然容易受到sql注入。

m_r_e_s()必须是你在sql查询字符串中使用之前对字符串做的最后一件事。

答案 2 :(得分:0)

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

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

“如果提供了匹配,那么它将填充搜索结果。$ matches [0]将包含与完整模式匹配的文本,$ matches 1将包含与第一个匹配的文本匹配的文本带括号的子模式,等等。“

答案 3 :(得分:0)

这就是单引号和双引号之间的差异:

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

答案 4 :(得分:0)

您可以使用: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