взорвать и предвидеть проблемы - PullRequest
1 голос
/ 02 января 2012

Пользователь вводит 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

Мои URL-адреса должны выглядеть следующим образом:

  1. google.net
  2. google.com

Как мне удалить \r, потому что это ломает все остальное?Есть ли лучший способ проверки URL?

Пробовал с str_replace, но не повезло.

Ответы [ 5 ]

1 голос
/ 02 января 2012

Лучший способ проверить URL-адреса - использовать функцию PHP filter_var() docs следующим образом:

if( ! filter_var($url, FILTER_VALIDATE_URL))) {
  echo 'BAD URL';
} else {
  echo 'GOOD_URL';
}
0 голосов
/ 02 января 2012

Вы можете использовать: 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

0 голосов
/ 02 января 2012

Вот где возникает разница между одинарными и двойными кавычками:

$flr_array = explode('\r\n', $flr_post);
0 голосов
/ 02 января 2012

Вы должны использовать регулярные выражения для проверки URL в вашем $ flr_array.

С preg_match () , если есть совпадение, оно заполнит переменную $ match результатами (еслиВы предоставили это в своем вызове функции).Вот что php.net должен сказать по этому поводу:

"Если совпадения предоставлены, то он заполняется результатами поиска. $ Match [0] будет содержать текст, который соответствует полному шаблону, $совпадения 1 будут содержать текст, соответствующий первому захваченному заключенному в скобки подшаблону и т. д. "

0 голосов
/ 02 января 2012

Используйте вместо этого preg_split,

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

Это разделится где угодно, где есть один или несколько \ n или \ r.

Для чего вы делаете mysql_real_escape_string? Это предназначено для базы данных позже? Не делайте побег, пока вы не выполните другую обработку. Эта обработка может нарушить экранирование m_r_e_s () и, тем не менее, оставить вас уязвимым для SQL-инъекций.

m_r_e_s () ДОЛЖЕН быть ПОСЛЕДНИМ, что вы делаете со строкой, прежде чем она будет использована в строке запроса sql.

...