Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Некорректная работа функции substr().
Форумы портала PHP.SU » » Работа с СУБД » Некорректная работа функции substr().

Страниц (1): [1]
 

1. mihon_kri - 14 Февраля, 2014 - 16:00:03 - перейти к сообщению
Доброе время суток! Столкнулся с такой проблемой: вывожу из БД (mysql) данные в раздел новости на сайте. В разделе анонс, хотел обрезать строку до 80 знаков функцией substr(). В итоге при выводе анонса выводится число знаков в 2 раза меньше и в конце строки появляется символ - знак вопроса в ромбике (какой иногда выводится из-за несоответствия кодировок). Кодировки базы и php-файлика UTF-8. Сам кусок кода, которым вывожу инфу:


CODE (php):
скопировать код в буфер обмена
  1. $rezultat = mysql_query($sql) or die(mysql_error());
  2. while ($rez = mysql_fetch_assoc($rezultat)){
  3.         $id = $rez['id'];
  4.         $idate = $rez['iidate'];
  5.         $name = $rez['name'];
  6.         $announce = $rez['announce'];
  7.         $announce = substr($announce, 0, 80);
  8.         $text = $rez['text'];
  9.         echo "<p>";
  10.         echo "<span>$idate</span><br/>";
  11.         echo "<a title='".$name."' href='/news_".$id.".htm'>".$name."</a> <br/>";
  12.         echo $announce;
  13.         echo "</p>";
  14.         }

при коннекте с БД так же указал такие параметры для вывода в правильной кодировке:

PHP:
скопировать код в буфер обмена
  1. define("DB_HOST", "localhost");
  2. define("DB_LOGIN", "root");
  3. define("DB_PASSWORD", "");
  4. define("DB_NAME", "dreamnew");
  5.        
  6. $conn = mysql_connect(DB_HOST, DB_LOGIN, DB_PASSWORD) or die("Ошибка соединения с сервером баз данных");
  7.  
  8. mysql_query("SET NAMES 'UTF8'");
  9. mysql_query("SET CHARACTER SET 'UTF8'");


Что то подсказывает, что с кодировками какая то бага... В чём тут может быть дело?
2. Мелкий - 14 Февраля, 2014 - 16:05:42 - перейти к сообщению
substr оперирует байтами.
Вам нужна mb_substr
3. Tyoma5891 - 14 Февраля, 2014 - 16:10:23 - перейти к сообщению
mihon_kri пишет:
Доброе время суток! Столкнулся с такой проблемой: вывожу из БД (mysql) данные в раздел новости на сайте. В разделе анонс, хотел обрезать строку до 80 знаков функцией substr(). В итоге при выводе анонса выводится число знаков в 2 раза меньше и в конце строки появляется символ - знак вопроса в ромбике (какой иногда выводится из-за несоответствия кодировок). Кодировки базы и php-файлика UTF-8. Сам кусок кода, которым вывожу инфу:


CODE (php):
скопировать код в буфер обмена
  1. $rezultat = mysql_query($sql) or die(mysql_error());
  2. while ($rez = mysql_fetch_assoc($rezultat)){
  3.         $id = $rez['id'];
  4.         $idate = $rez['iidate'];
  5.         $name = $rez['name'];
  6.         $announce = $rez['announce'];
  7.         $announce = substr($announce, 0, 80);
  8.         $text = $rez['text'];
  9.         echo "<p>";
  10.         echo "<span>$idate</span><br/>";
  11.         echo "<a title='".$name."' href='/news_".$id.".htm'>".$name."</a> <br/>";
  12.         echo $announce;
  13.         echo "</p>";
  14.         }

при коннекте с БД так же указал такие параметры для вывода в правильной кодировке:

PHP:
скопировать код в буфер обмена
  1. define("DB_HOST", "localhost");
  2. define("DB_LOGIN", "root");
  3. define("DB_PASSWORD", "");
  4. define("DB_NAME", "dreamnew");
  5.        
  6. $conn = mysql_connect(DB_HOST, DB_LOGIN, DB_PASSWORD) or die("Ошибка соединения с сервером баз данных");
  7.  
  8. mysql_query("SET NAMES 'UTF8'");
  9. mysql_query("SET CHARACTER SET 'UTF8'");


Что то подсказывает, что с кодировками какая то бага... В чём тут может быть дело?

к тому же использование
mysql_query("SET NAMES 'UTF8'");
mysql_query("SET CHARACTER SET 'UTF8'")
не имеет никакого смысла, корректнее работает изь этих двух только mysql_query("SET NAMES 'UTF8'");
4. mihon_kri - 15 Февраля, 2014 - 12:35:09 - перейти к сообщению
Спасибо, в понедельник на работке попробую с mb_substr

 

Powered by ExBB FM 1.0 RC1