2016-10-31 2 views
-1

Когда я использую htmlentities() для кодирования переменной, он работает как шарм, но если я делаю то же самое с массивом, он просто возвращает пустой массив. Я попытался использовать array_map(), но это та же история. Я попытался переключить кодировку на ISO-8859-1 и UTF-8, но безуспешно. Он не хочет работать.htmlentities() возвращает пустую строку при использовании с массивом

Вот код:

<html> 
<head> 
    <title>Signup</title> 
</head> 
<body> 
    <form name="signup" method="POST" action="form.php"> 
    <fieldset> 
    <legend><p style="color:red; font-size:16px">Sports</p></legend> 
    <ul> 
    <li> 
     <input type="checkbox" name="sports[]" value="soccer"> 
     <label for="soccer">Soccer</label> 
    </li> 
    <li> 
     <input type="checkbox" name="sports[]" value="water_polo"> 
     <label for="water_polo">Water polo</label> 
    </li> 
    <li> 
     <input type="checkbox" name="sports[]" value="tennis"> 
     <label for="tennis">Tennis</label> 
    </li> 
    <li> 
     <input type="checkbox" name="sports[]" value="volleyball"> 
     <label for="volleyball">Volleyball</label> 
    </li> 
    </ul> 
    </fieldset> 
    </form> 
    <?php 
    $sports = htmlentities($_POST["sports"], ENT_COMPAT, 'ISO-8859-15'); 

    $count = count($sports); 
    if($count == 0) { 
     echo "You don't play any sports.<br>"; 
    } else { 
     echo "You like playing: "; 
     foreach($sports as $s) { 
      if(--$count == 0) { 
        echo "<span style='color:red'>$s</span>.<br>"; 
        break; 
      } else { 
        echo "<span style='color:red'>$s</span>, "; 
      } 
     } 
    } 
    ?> 
</body> 
</html> 

Он производит следующий вывод:

You don't play any sports.

Значение htmlentities() не был в состоянии кодировать мой массив.

+2

Как выглядит форма/входы? и как вы использовали 'array_map()'? –

+0

['htmlentities()'] (http://php.net/manual/de/function.htmlentities.php) не принимает массив. – simon

+0

@simon Я сомневаюсь, что OP понимает немецкий ;-) Используйте английские ссылки http://php.net/manual/en/function.htmlentities.php при ссылках на PHP.net –

ответ

1

Я не знаю, как вы пытались использовать array_map, но следующее один правильный подход:

function sanitize($arg) { 
    if (is_array($arg)) { 
     return array_map('sanitize', $arg); 
    } 

    return htmlentities($arg, ENT_QUOTES, 'UTF-8'); 
} 
$array = array_map('sanitize', $_POST); 

Это использует рекурсию поэтому он будет работать с многомерными массивами.

+0

Вот как я использовал 'array_map()': '$ array = array_map (" htmlentities ", $ _POST [" array "], ENT_COMPAT, 'ISO-8859-15')' – sgrontflix

+0

@sgrontflix, что не так, как я используя его ... Если вы хотите передать аргументы, прочитайте [этот комментарий] (http://php.net/manual/en/function.array-map.php#84632). –

+1

Я снова прочитал руководство для 'array_map()' и понял, что я полный идиот-лол ... Большое спасибо за чистую функцию, теперь я все понимаю :) – sgrontflix

Смежные вопросы