Не пойму в чем дело Как такое может быть, я в базе данных менял кодировку на сайте менял, ничего понять не могу. Сейчас на сайте и в базе данных стоит кодировка UTF-8, помогите разобраться. На всякий случай выкладываю фаил отвечающий за этот текст: PHP: {php} function insert_cutText($array){ $text = @$array["un"]["name"]; $size = @$array["un"]["size"]; $useDot = @$array["un"]["useDot"]; $useDot == "" ? $useDot = true : $useDot = false ; $size == "" ? $size = 35 : $size = $size ; $dot = ""; if ($useDot == "true"){$dot = "...";} if ((strlen($text)-1) <= $size){ $dot = ""; } return substr($text,0,$size).$dot; } function insert_cutTextDesc($array){ $text = @$array["un"]["descrip"]; $size = @$array["un"]["size"]; $useDot = @$array["un"]["useDot"]; $useDot == "" ? $useDot = true : $useDot = false ; $size == "" ? $size = 70 : $size = $size ; $dot = ""; if ($useDot == "true"){$dot = "...";} if ((strlen($text)-1) <= $size){ $dot = ""; } return substr($text,0,$size).$dot; } {/php} Здесь function insert_cutTextDesc($array) тоже пробывал по всякому код редактить, но как я в этом, очень далекий человек, следовательно ничего не получилось. Хотел сделать чтобы текст урезался не по каличеству символов, а по словам, т.е. чтобы выводил 5-6 слов не более.
utf-8 содержит символы так, что на некоторые уходит не 1, а 2 байта. На русский уходлит два, да. Поэтому запись PHP: <? $text = 'Пи'; echo $text[0]; вернёт не "П", а половину "П" - первый байт этой буквы. А в браузере это будет выглядеть как знак вопроса в чёрном квадрате. Как у тебя на скриншоте, ага. PHP: <? // [url=http://nudnik.ru/entry/1125]http://nudnik.ru/entry/1125[/url] function truncate($string, $len = 150){ preg_match('/.{1,'.$len.'}[^.!;?]*[.!;?]/si', trim(strip_tags($string)).'. ', $match); return $match[0]; } Моё (какбэ) для обрезки предложений в т.ч. и юникодовой: PHP: <? $longtext = 'Мама мыла раму, и мыла, и мыла, и мыла... блин, не мама, а домработница.'; echo truncate($longtext, 10); // обрезаем на 10 символов, в реальности обрежится на 14, то есть до первого знака препинания А самый простой способ, когда ты точно знаешь, что текст русский или английский, то переведи текст чеез iconv() в windows-1251, а на выходе обратно в utf-8.
И ещё. Забыл. Для utf-8 используй библиотеку mbstring. Обычно она стоит на хостинге. То есть используй ms_substr() вместо substr() и mb_strlen() вместо strlen(). Ты можешь прописать в .htaccess или php.ini чтобы функции mbstring сами подменяли обычные текстовые функции. Короче, читай на http://ru.php.net/mbstring и в интернете, да. Тема в целом очень геморойная, но ознакомится стоит.
lexa Спасибо конечно, но что я понял из твоего поста это только то что буква режется попалам и поэтому квадратик с вопросиком. Я в php очень туго, только хочу начать учить, справочник есть, только руки не доходят . Не пойму того что мне надо сделать чтобы это пропало, как я понял PHP: # $text = @$array["un"]["name"]; -$text выводит название моей новости # $size = @$array["un"]["size"]; -$size выводит описание моей новости Вот это обрезает текст после 70 символов PHP: $size == "" ? $size = 70 : $size = $size ; Какой код нужно заменить, чтобы было счастье Фаил php.ini у меня на сервере лежить, думаю с этим я разберусь. А вот с текстом этим и квадратом, для меня все очень сложно .
viphost, второй абзац моего второго поста: Для utf-8 используй библиотеку mbstring. Обычно она стоит на хостинге. То есть используй ms_substr() вместо substr() и mb_strlen() вместо strlen(). Используй функции ms_substr() вместо substr() и mb_strlen() вместо strlen() при работе с utf-8 и будет счастье. Вот решение для копирования и вставления. Замени этим кодом вой код в обеих функциях. Замени это: PHP: <? if ($useDot == "true"){$dot = "...";} if ((strlen($text)-1) <= $size){ $dot = ""; } return substr($text,0,$size).$dot; на это: PHP: <? $text = iconv('utf-8', 'windows-1251', $text); if ($useDot == "true"){$dot = "...";} if ((strlen($text)-1) <= $size){ $dot = ""; } $text = substr($text,0,$size).$dot; return iconv('windows-1251', 'utf-8', $text); P.S. Как чайник в php ты напрасно схватился с utf-8, как я заметил, это гемморойная вещица.
Ребята извиняюсь если не в тему, помогите пожалуйста с кодировкой. Создаю вот такой код (для примера): HTML: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Соединяемся с БД</title> </head> <body> <?php $db = mysql_connect("localhost","trojan","password"); mysql_select_db("firstbd",$db); $result = mysql_query ("INSERT INTO firma (name,lastname,position) VALUES ('Сергей','Семак','Грузчик')"); if ($result == 'true') { echo "Информация в базу добавлена успешно!"; } else { echo "Информация в базу не добавлена!"; } ?> </body> </html> Получается так что, то что изначально было введено в MySQL отображается нормально, а то что прописывается в коде и добавляется в MySQL через DreamWeaver (хотя DreamWeaver тут наверно ни при чем) идет кракозябрами. Как такая проблема решается?
У тебя по какой-то причине не срабатывает строка HTML: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> и ты получаешь страницу в 1251
2 Trojan 1) Добавь в самый верх скрипта: <?php header('Content-type: text/html; charset=utf-8'); ?> 2) Проверь что сам файл скрипта сохранен в utf-8 3) Перед INSERT-ом в базу вставь mysql_query ("SET NAMES utf8");
Сделал так: HTML: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Соединяемся с БД</title> </head> <body> <?php header('Content-type: text/html; charset=utf-8'); $db = mysql_connect("localhost","trojan","password"); mysql_select_db("firstbd",$db); $result = mysql_query ("INSERT INTO firma (name,lastname,position) VALUES ('Сергей','Семак','Грузчик')"); if ($result == 'true') { echo "Информация в базу добавлена успешно!"; } else { echo "Информация в базу не добавлена!"; } ?> </body> </html> но: а) не срабатывает скрипт и б) идут точно такие же краки.
Я не совсем точно выразился. Не в начало скрипта а в начало файла. <?php header('Content-type: text/html; charset=utf-8'); ?> <!DOCTYPE html...> ..... В какой кодировке сохранен файл скрипта? Точно в utf-8? Ты не вставил mysql_query ("SET NAMES utf8"); перед INSERT-ом
Может быть это тебе поможет: у вас показываются "?????" вместо слов. Нужно сделать следующие: 1. При закачивании вашей базы данных выберите нужную вам "Кодировку файла". Сделать вы этом можете в PhpMyAdmin на странице SQL, нижняя строчка, напротив кнопки "Пошел". 2. Впишите в вашем скрипте, в файле который управляет базой данных, следующий код: mysql_query ("set character_set_client='cp1251'"); mysql_query ("set character_set_results='cp1251'"); mysql_query ("set collation_connection='cp1251_general_ci'"); Этот код нужно вписывать сразу же после открытия базы данных.
Вот это помогло, текст русский отображается нормально, но теперь в таблице сдвинулись строки: Это в какую сторону копать? И еще можно ли как то решить вопрос кодировки по другому чтобы не вбивать каждый раз в начало файла строку <?php header('Content-type: text/html; charset=utf-8'); ?>. ?
Ну то что в таблице строки сдвигаются это к дизайну-верстке вопрос. А чем тебе так мешает эта строка в начале скрипта? Да, браузеру нужно указывать кодировку страницы что бы не было проблем с отображением иероглифов.
Trojan А если будешь юзать mb_..... функции, то в начале надо указать PHP: <?php mb_internal_encoding('utf-8'); mb_regex_encoding('utf-8'); ?>