Как быстро получить теги в массиве из строки? - PullRequest
3 голосов
/ 22 июля 2009

У меня есть $ _GET ['tags'] = "яблоки, апельсины, бананы, виноград, вишня"

Мне нужно поместить данные в массив ( $ tags ).

Что такое быстрый способ обрезки каждого элемента и выполнения функций безопасности (удаление HTML, специальные символы)?

Ответы [ 4 ]

3 голосов
/ 22 июля 2009

С помощью array_walk () вы можете написать свою функцию очистки тегов отдельно, а затем легко применить ее к вашим входящим данным.

function sterilize(&$val,$key)
{
    //do whatever security you need here
    $val = trim($val);
    $val = strip_tags($val);
    //etc
    return htmlspecialchars($val);
}
$bad_values = explode(',',$_GET['tags']);
array_walk($bad_values,'sterilize');
1 голос
/ 22 июля 2009

Будьте осторожны, как вы это делаете. Экранирование HTML - это задача output , а не то, что вы хотите делать с данными, которые не собираетесь немедленно печатать на странице.

Я думаю, что это выглядит довольно явно с такими вещами, и действительно отделяет фильтрацию контента от экранирования контента.

// First, get the tags as an array, filtered to be valid data
$tags = array_map( 'filterTag', explode( ',', $_GET['tags'] ) );

// Do whatever other processing with $tags

// NOW, create a version of the tags that you'll use for display only
// or do this step ONLY just prior to display
$tagsSafeForHtml = array_map( 'escapeForHtml', $tags );

function filterTag( $tag )
{
  // Use whatever combination of filtering functions you want
  return trim( strip_tags( $value ) );
}

function escapeForHtml( $value )
{
  // Use whatever escaping strategy that makes most sense for your content
  return htmlspecialchars( $value, ENT_COMPAT, 'UTF-8' );
}
1 голос
/ 22 июля 2009

Используя array_map , чтобы применить trim() и htmlentities ко всем элементам в массиве, вы можете сделать это в одну строку:

$tags = array_map('htmlentities', array_map('trim', explode(',', strip_tags($_GET["tags"]))));
1 голос
/ 22 июля 2009

Попробуйте следующее:

function process_tags($tags) {
    $tags = strip_tags($tags);
    $tags = explode(',', $tags);
    foreach($tags as $key => $value) {
        $tags[$key] = htmlentities($tags[$key]);
        $tags[$key] = trim($tags[$key]);
    }

    return $tags;
}

Вы можете просто вызвать функцию следующим образом:

$myTags = "apples, berries, oranges";
$tags = process_tags($myTags);
...