Предупреждение: strlen () ожидает, что параметр 1 будет строкой, а массив указан в /include/functions/general.php в строке 159 - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть эта ошибка:

Предупреждение: strlen () ожидает, что параметр 1 будет строкой, а массив указан в /include/functions/general.php в строке 159

в файле:

function tep_get_all_get_params($exclude_array = '') {
    global $HTTP_GET_VARS;

    if (!is_array($exclude_array)) $exclude_array = array();

    $get_url = '';
    if (is_array($HTTP_GET_VARS) && (sizeof($HTTP_GET_VARS) > 0)) {
      reset($HTTP_GET_VARS);
      while (list($key, $value) = each($HTTP_GET_VARS)) {
        if ( (strlen($value) > 0) && ($key != tep_session_name()) && ($key != 'error') && (!in_array($key, $exclude_array)) && ($key != 'x') && ($key != 'y') ) { // THIS IS 159 LINE
          $get_url .= $key . '=' . rawurlencode(stripslashes($value)) . '&';
        }
      }
    }

    return $get_url;
  }

Может ли кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 28 апреля 2018

Проблема в вашем звонке на each. Возвращает массив из 4 элементов:

Элементы 0 и ключ содержат имя ключа элемента массива, а 1 и значение содержат данные.

Это означает, что $key получает назначенное имя ключа, как вы ожидаете, но $value получает массив с 3 элементами с индексами 'key', 1, and 'value'.

Самый простой способ решить эту проблему - изменить эту строку:

while (list($key, $value) = each($HTTP_GET_VARS)) {

до

foreach ($HTTP_GET_VARS as $key => $value) {

Обратите внимание, что вы можете удалить строку:

reset($HTTP_GET_VARS);

, поскольку это не требуется при использовании foreach. Также обратите внимание, что $HTTP_GET_VARS устарело с PHP4.1.0, и вы должны заменить его на $_GET.

...