2015-07-29 7 views
1

У меня возникает раздражающая ошибка PHP-уведомления с момента обновления до PHP 5.4. Я вижу, где это происходит, но у меня просто нет опыта, чтобы исправить код и остановить уведомление.PHP Примечание: Неинициализированное смещение строки 0

PHP Примечание: Uninitialized строка смещения: 0

Сво происходит на линии 108 кода, который на самом деле относится к этой линии: $contents[$o] = $this->unicode_entity_replace($contents[$o]);

Функция в вопросе заключается в следующем:

class unicode_replace_entities { 
     public function UTF8entities($content="") { 
      $contents = $this->unicode_string_to_array($content); 
      $swap = ""; 
      $iCount = count($contents); 
      for ($o=0;$o<$iCount;$o++) { 
       $contents[$o] = $this->unicode_entity_replace($contents[$o]); 
       $swap .= $contents[$o]; 
      } 
      return mb_convert_encoding($swap,"UTF-8"); 
     } 

Любая помощь или объяснение было бы очень оценено.

EDIT: Полный код для оставшейся части ниже класса (Извинения не был включен раньше):

  public function unicode_string_to_array($string) { //adjwilli 
      $strlen = mb_strlen($string); 
      $array = ""; 
      while ($strlen) { 
       $array[] = mb_substr($string, 0, 1, "UTF-8"); 
       $string = mb_substr($string, 1, $strlen, "UTF-8"); 
       $strlen = mb_strlen($string); 
      } 
      return $array; 
     } 

     public function unicode_entity_replace($c) { //m. perez 
      $h = ord($c{0}); 
      if ($h <= 0x7F) { 
       return $c; 
      } else if ($h < 0xC2) { 
       return $c; 
      } 

      if ($h <= 0xDF) { 
       $h = ($h & 0x1F) << 6 | (ord($c{1}) & 0x3F); 
       $h = "&#" . $h . ";"; 
       return $h; 
      } else if ($h <= 0xEF) { 
       $h = ($h & 0x0F) << 12 | (ord($c{1}) & 0x3F) << 6 | (ord($c{2}) & 0x3F); 
       $h = "&#" . $h . ";"; 
       return $h; 
      } else if ($h <= 0xF4) { 
       $h = ($h & 0x0F) << 18 | (ord($c{1}) & 0x3F) << 12 | (ord($c{2}) & 0x3F) << 6 | (ord($c{3}) & 0x3F); 
       $h = "&#" . $h . ";"; 
       return $h; 
      } 
     } 
+0

Не угадывайте и не заставляйте нас гадать, 'var_dump ($ contents, $ o)', чтобы увидеть, с чем вы пытаетесь работать здесь. – deceze

+0

, пожалуйста, предоставьте код 'unicode_string_to_array' – maxpovver

+0

Привет, спасибо за комментарии, полный код выше. – BottyZ

ответ

1

Если вы используете синтаксис массива на нитке, таких как $s[1] она будет иметь доступ к второе письмо. Однако, если строка пуста, вы получите ошибку смещения. Это можно предотвратить, используя !empty($s) или убедитесь, что вы действительно используете массив с is_array().

+0

он не получает строку $ conetnt в виде массива в заданном коде – maxpovver

+0

, вы не знаете о его функции unicode_string_to_array(). поэтому вы не можете сказать. однако я дал решение и для другого дела. –

0

Как насчет foreach?

class unicode_replace_entities { 
     public function UTF8entities($content="") { 
      $contents = $this->unicode_string_to_array($content); 
      $swap = ""; 
      $iCount = count($contents); 
      foreach ($contents as $k=>$v) { 
       $contents[$k] = $this->unicode_entity_replace($v); 
       $swap .= $contents[$k]; 
      } 
      return mb_convert_encoding($swap,"UTF-8"); 
     } 
+0

Пробовал это и теперь получил 'PHP Warning: неверный аргумент, предоставленный foreach()' – BottyZ

0

Мне удалось выяснить это. Как было указано другой полезной душой, в функции unicode_string_to_array было $array = "";, что приводит к тому, что $ array является строкой, а не массивом. Он должен быть инициализирован с использованием $array = array();

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