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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проблема с выводом.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
event
Отправлено: 25 Января, 2012 - 01:24:35
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 542
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Доброй ночи.
У меня проблема с выводом информации с базы. В общем вывожу информацию с базы, текст выводится все нормально, но кое где, буквы меняются на такие значок "�", более подробно на скриншоте:

У кого скриншот не открывается, вот URL: http://img13[dot]imageshost[dot]ru/img/2[dot][dot][dot]f1f4032d8cfe[dot]png

Ну вот все файлы сайте в кодировке UTF-8 без BOM, база в кодировке utf8_general_ci
В базу подключаюсь по обычному, еще использую при подключение к базе, вот такое чудо:
PHP:
скопировать код в буфер обмена
  1. mysql_query("SET NAMES $mysql_charset");
  2.     mysql_query("set character_set_client='utf8'");
  3.     mysql_query("set character_set_results='utf8'");
  4.     mysql_query("set collation_connection='utf8_general_ci'");

Если уберу это, то в базу данные записываются с плохой кодировкой.

Вот кстати код:
PHP:
скопировать код в буфер обмена
  1. <?
  2.  
  3. require_once("include/incfile.php");
  4. dbconnect(); //Подключение к базе данных
  5.  
  6. $result = mysql_query("SELECT * FROM news ORDER BY id DESC");
  7. while ($row=mysql_fetch_assoc($result)) {
  8. if (strlen($row['text']) > 250){
  9. $row['text'] = substr($row['text'], 0, 250) . "... <a href=\"new.php?id=".$row['id']."\">Читать дальше > </a>";  
  10. }
  11.  
  12. echo $row['text'];
  13. }
  14.  
  15. ?>
  16.  


Ну вот, что делать, куда копать?
Заранее благодарен.

(Отредактировано автором: 25 Января, 2012 - 01:33:42)

 
 Top
OrmaJever Модератор
Отправлено: 25 Января, 2012 - 01:28:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Судя по троеточию вконце каждой новости, она обрезается функцией substr(), а поскольку кодировка кодировка utf8 то последний символ просто режится (из символа берётся только один байт из двух), а этот один байт и выглядит как ромбик.
Решение, использовать mb_substr()


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
event
Отправлено: 25 Января, 2012 - 01:36:29
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 542
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




OrmaJever
Привет, спасибо что так быстро ответил. Улыбка
PHP:
скопировать код в буфер обмена
  1. <?
  2.  
  3. require_once("include/incfile.php");
  4. dbconnect(); //Подключение к базе данных
  5.  
  6. $result = mysql_query("SELECT * FROM news ORDER BY id DESC");
  7. while ($row=mysql_fetch_assoc($result)) {
  8. if (strlen($row['text']) > 250){
  9. $row['text'] = mb_substr($row['text'], 0, 250) . "... <a href=\"new.php?id=".$row['id']."\">Читать дальше > </a>";  
  10. }
  11.  
  12. echo $row['text'];
  13. }
  14. ?>
  15.  
Вот пробовал, но результате тот же.
(Добавление)
PHP:
скопировать код в буфер обмена
  1. <?
  2.  
  3. require_once("include/inchost.php");
  4. dbconnect(); //Подключение к базе данных
  5.  
  6. $result = mysql_query("SELECT * FROM news ORDER BY id DESC");
  7. while ($row=mysql_fetch_assoc($result)) {
  8. if (strlen($row['text']) > 250){
  9. $row['text'] = mb_substr($row['text'],0,250,'utf-8') . "... <a href=\"new.php?id=".$row['id']."\">Читать дальше > </a>";  
  10. }
  11.  
  12. echo $row['text'];
  13. }
  14. ?>
  15.  


Все вот правильный вариант, спасибо получилось, тыкнул плюсик.
 
 Top
OrmaJever Модератор
Отправлено: 25 Января, 2012 - 01:46:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




strlen() тоже нужно заменить на mb_strlen(). Обычная strlen считает не символы а байты, а посколку в utf8 многие символ из 2 байт то результат будет не верный. Можешь вывести и посмотреть значение.
Спасибо за сотую спасибку.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
event
Отправлено: 25 Января, 2012 - 08:32:25
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 542
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




OrmaJever
Спасибо, после работы попробую.
Теперь 101. ;)
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Кодировки и все смежное »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB