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 :: Версия для печати :: Проблема с выводом.
Форумы портала PHP.SU » » Кодировки и все смежное » Проблема с выводом.

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

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

У кого скриншот не открывается, вот 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.  


Ну вот, что делать, куда копать?
Заранее благодарен.
2. OrmaJever - 25 Января, 2012 - 01:28:51 - перейти к сообщению
Судя по троеточию вконце каждой новости, она обрезается функцией substr(), а поскольку кодировка кодировка utf8 то последний символ просто режится (из символа берётся только один байт из двух), а этот один байт и выглядит как ромбик.
Решение, использовать mb_substr()
3. event - 25 Января, 2012 - 01:36:29 - перейти к сообщению
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.  


Все вот правильный вариант, спасибо получилось, тыкнул плюсик.
4. OrmaJever - 25 Января, 2012 - 01:46:13 - перейти к сообщению
strlen() тоже нужно заменить на mb_strlen(). Обычная strlen считает не символы а байты, а посколку в utf8 многие символ из 2 байт то результат будет не верный. Можешь вывести и посмотреть значение.
Спасибо за сотую спасибку.
5. event - 25 Января, 2012 - 08:32:25 - перейти к сообщению
OrmaJever
Спасибо, после работы попробую.
Теперь 101. ;)

 

Powered by ExBB FM 1.0 RC1