[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с кодировкой
_mitya
есть скрипт постраничного вывода из бд. кодировка бд win-1251. в phpmyadmin все русскеи символы видятся, а при выводе через php вместо русских символов - вопросики. Как указать кодировку для этого скрипта.



Спустя 58 секунд (15.08.2011 - 16:43) neadekvat написал(а):
header("Content-type: text/html; charset=windows-1251");
в начале скрипта.

Спустя 13 минут, 6 секунд (15.08.2011 - 16:56) _mitya написал(а):
Cannot modify header information - headers already sent by ......
ошибка такого рода. что делать?

Спустя 47 секунд (15.08.2011 - 16:57) neadekvat написал(а):

Спустя 4 минуты, 22 секунды (15.08.2011 - 17:01) _mitya написал(а):
исправил, ошибки нет. все равно вместо русских символов вопросы. что еще может быть не так?
в PHPMYADMIN все отображается корректно.

Спустя 5 минут, 5 секунд (15.08.2011 - 17:06) neadekvat написал(а):
Блин, из faq еще один пункт пропал ><

После подключения к базе сделай так:
mysql_set_charset('cp1251');

Если не сработает, то поменяй на это:
mysql_query('SET NAMES "cp1251"');

Спустя 2 минуты, 50 секунд (15.08.2011 - 17:09) _mitya написал(а):
Access denied for user 'ODBC'@'localhost' (using password: NO) in ..........
хотя все данные о пользователе и бд прописаны.
вот скрипт. может что-то не так.

<?
header("Content-type: text/html; charset=windows-1251");
?>
<!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=windows-1251" />
<
title>Все материалы</title>
<
link href="style.css" rel="stylesheet" type="text/css" />
</
head>

<?php
include("header.php");
?>
<div class="content">
<?php

//подключаем класс Paging
require('paging.inc.php');

$host='localhost';
$user='root';
$passwd='';
$db_name='db121';
//соединяемся с базой данных
$_DB = new mysqli($host,$user,$passwd,$db_name);
mysql_query('SET NAMES "cp1251"');

//создаем экземпляр класса Paging
//в качестве параметра передаем ему указатель на соединение с MySQL

$_PAGING = new Paging($_DB);

//выполняем обычный запрос данных не заботясь
//о разбивке на страницы через метод get_page объекта класса Paging

$r = $_PAGING->get_page( 'SELECT * FROM material' );
echo '<h2>Все материалы</h2>';
echo '<table cellspacing=0px; class="material_show">';
echo '<tr><td style="height:15px; background-color:#BED2F3" colspan="6"></td></tr>';
echo '<tr>
<th style="width:25px">Код</th>
<th style="width:60px">Дата</th>
<th style="width:190px">Название</th>
<th style="width:80px">Отдел</th>
<th style="width:170px">Путь</th>
<th>Исполнитель</th></tr>'
;

while($row = $r->fetch_assoc())
{
echo '<tr>';
echo '<td align="center">'.$row['id_number'].'</td>
<td align="center">'
.$row['date'].'</td>
<td>'
.$row['name'].'</td>
<td>'
.$row['section'].'</td>
<td>'
.$row['path'].'</td>
<td>'
.$row['executor'].'</td>';
echo '</tr>';
}
echo '<tr><td style="height:15px; background-color:#BED2F3" colspan="6"></td></tr>';
echo '</table>';





//выводим информационную строку вида: "Показано с 1 по 20 из 107"
echo '<span style="margin-left:20px">';
echo $_PAGING->get_result_text().' материалов';

echo '<div class="backup"><a href="dump/index.php">Сделать копию базы данных</a></div>';

//выводим ссылки-ярлыки на предыдущую и следующую страницы
echo '<br><span style="margin-left:20px">Страницы:</span> '.$_PAGING->get_prev_page_link().' '.$_PAGING->get_next_page_link().'<br /><br />';

//а также строку с номерами страниц (основные ярлыки)
echo '<span style="margin-left:20px">';
echo $_PAGING->get_page_links();
echo '<div style="height:30px">';

?>
</div></div>
</
body>
</
html>

Спустя 4 минуты, 26 секунд (15.08.2011 - 17:14) neadekvat написал(а):
Парень, вот серьезно, ты просто копируешь, не думая?

Ну, ок. Пусть так.

Сделай так вместо mysql_query:
$_DB->query('SET NAMES "cp1251"');

Спустя 1 минута, 27 секунд (15.08.2011 - 17:15) _mitya написал(а):
блииин, я б этом кстати думал, но я не знал, как это записать))
Спасибо большое! biggrin.gif

Спустя 7 минут, 51 секунда (15.08.2011 - 17:23) _mitya написал(а):
есть другой вопрос. на другой странице есть поиск с автозаполнением,он перестал работать изза этой смены кодировок.
поставил все как и при выводе - но нет. что может быть не так?

<?php

$q = strtolower( $_GET["q"] );
if (!$q) return;

$dbhost = "localhost"; // Database Host
$dbuser = "root"; // User
$dbpass = ""; // Password
$dbname = "db121"; // Name of Database

mysql_connect( $dbhost, $dbuser, $dbpass ) or die( mysql_error() );
mysql_select_db( $dbname ) or die( mysql_error() );
mysql_query("SET NAMES 'cp1251'");
mysql_query("SET CHARACTER SET 'cp1251'");
// Replace "TABLE_NAME" below with the table you'd like to extract data from
$data = mysql_query( "SELECT * FROM material" )
or die( mysql_error() );

// Replace "COLUMN_ONE" below with the column you'd like to search through
// In between the if/then statement, you may present a string of text
// you'd like to appear in the textbox.

while( $row = mysql_fetch_array( $data )){
if ( strpos( strtolower( $row['name'] ), $q ) !== false ) {
echo $row['name'] . " \n";
}
}

?>

Спустя 3 минуты, 47 секунд (15.08.2011 - 17:27) neadekvat написал(а):
Во-первых - это капец какой-то. SQL тебе предоставляет возможность делать выборку по WHERE, чтобы не приходилось записи фильтровать на php.

Во-вторых, символы перед запросом надо кодировать через urlencode, а при получении в этом скрипте раскодировать черезе urldecode, а уж потом использовать. Смотри через средства отработки типа firebug'a, какие там запросы на фоне прохдят, открывай этот свой скрипт с конкретными запросами и смотри, что происходит.

Спустя 16 часов, 7 минут, 2 секунды (16.08.2011 - 09:34) _mitya написал(а):
Цитата (neadekvat @ 15.08.2011 - 14:27)
Во-вторых, символы перед запросом надо кодировать через urlencode, а при получении в этом скрипте раскодировать черезе urldecode, а уж потом использовать. Смотри через средства отработки типа firebug'a, какие там запросы на фоне прохдят, открывай этот свой скрипт с конкретными запросами и смотри, что происходит.

я в этом не особо разбираюсь. Этот скрипт я нашел. он в кодировке utf-8 прекрасно работал, только был регистрозависимым, то есть принимал только маленькие или большие буквы. поэтому захотел win-1251. так это изза смены кодировки произошли или все таки нет? как можно минимально исправить код, чтоб работал?

Спустя 1 час, 24 минуты, 26 секунд (16.08.2011 - 10:58) neadekvat написал(а):
Цитата (_mitya @ 16.08.2011 - 10:34)
как можно минимально исправить код, чтоб работал?

Я описал, что нужно делать. Если не понимаешь.. Ну извините-извините, придется либо разбираться, либо ждать тех, кто готов до посинения сидеть с вопрошающим.

Спустя 6 минут, 1 секунда (16.08.2011 - 11:04) _mitya написал(а):
а в utf-8 полюбому регистрозависимо будет,да? я ставил utf8_general_ci в mysql.

то есть вот тут
while( $row = mysql_fetch_array( $data )){
if ( strpos( strtolower( $row['name'] ), $q ) !== false ) {
echo $row['name'] . " \n";
}


нужно изменить кодирование и раскодирование?

Спустя 12 минут, 51 секунда (16.08.2011 - 11:17) neadekvat написал(а):
> utf8_general_ci
Это как раз регистронезависимая кодировка.

Ты читал про функции url(en|de)code?

Спустя 9 минут, 21 секунда (16.08.2011 - 11:26) _mitya написал(а):
Цитата (neadekvat @ 16.08.2011 - 08:17)
> utf8_general_ci
Это как раз регистронезависимая кодировка.

Ты читал про функции url(en|de)code?

а почему тогда если регистронезависимая, то если написать - "письмо" он найдет, а "Письмо" - не найдет
читал, но я не пойму, там написано, что это для URL...
или я действительно чего-то не пойму.

Спустя 12 минут, 55 секунд (16.08.2011 - 11:39) Renden написал(а):
_mitya
Я тоже не понял зачем использовать пых если можно использовать sql. Ну типа того:

$search = isset($_GET["q"]) ? trim(strtolower(mysql_real_escape_string($_GET["q"]))) : '';
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "";
$dbname = "db121";
mysql_connect( $dbhost, $dbuser, $dbpass ) or die( mysql_error() );
mysql_select_db( $dbname ) or die( mysql_error() );
mysql_query("SET NAMES 'cp1251'");
mysql_query("SET CHARACTER SET 'cp1251'");
if(!empty($search))
{
$query = mysql_query("SELECT * FROM material WHERE name='$search'")or die(mysql_error());
while($row = mysql_fetch_array($query))
echo $row['name'] . " \n";
}
else echo "Строка поиска не может быть пустой";

Спустя 6 минут, 12 секунд (16.08.2011 - 11:45) _mitya написал(а):
ошибка

mysql_real_escape_string() [<a href='function.mysql-real-escape-string'>function.mysql-real-escape-string</a>]: Access denied for user 'ODBC'@'localhost' (using password: NO

Спустя 2 минуты, 33 секунды (16.08.2011 - 11:48) Renden написал(а):
_mitya
Ну надо сначала конект к базе сделать, т.е логин пароль и подключение вверху..кароч:

$dbhost = "localhost";
$dbuser = "root";
$dbpass = "";
$dbname = "db121";
mysql_connect( $dbhost, $dbuser, $dbpass ) or die( mysql_error() );
mysql_select_db( $dbname ) or die( mysql_error() );
mysql_query("SET NAMES 'cp1251'");
mysql_query("SET CHARACTER SET 'cp1251'");
$search = isset($_GET["q"]) ? trim(strtolower(mysql_real_escape_string($_GET["q"]))) : '';
if(!empty($search))
{
$query = mysql_query("SELECT * FROM material WHERE name='$search'")or die(mysql_error());
while($row = mysql_fetch_array($query))
echo $row['name'] . " \n";
}
else echo "Строка поиска не может быть пустой";


Спустя 4 минуты, 51 секунда (16.08.2011 - 11:53) _mitya написал(а):
не работает
Это вот еще на странице поиска прописываю

<script type="text/javascript" charset="windows-1251" src="js/jquery-1.2.6.pack.js"></script>
<
script type="text/javascript" charset="windows-1251" src="js/jquery.autocomplete.pack.js"></script>
<
link href="style.css" rel="stylesheet" type="text/css" />
<
script type="text/javascript">
$().ready(function() {
$("#targetDiv").autocomplete("autocomplete.php", {
width: 654,
selectFirst: true
});

});
</
script>




как можно просто указать кодировку при этом автозаполнении?

Спустя 10 минут, 38 секунд (16.08.2011 - 12:03) Renden написал(а):
_mitya
javascript по умолчанию посылает utf-8 так что мой те совет, переводи свой сайтег на utf8 и неломай себе и другим моск, серьезно, cp1251 убивает сайт на корню..

ЗЫ
iconv("UTF-8", "CP1251", $search); 
если не хочешь менять кодировку..

Спустя 23 минуты, 11 секунд (16.08.2011 - 12:27) _mitya написал(а):
а в чем может быть причина, что в utf8 например слово "Письмо" не выведет, а "письмо" выведет?

Спустя 3 минуты, 5 секунд (16.08.2011 - 12:30) Renden написал(а):
_mitya
Наверно заместо strtolower надо mb_strtolower happy.gif

Спустя 56 минут, 15 секунд (16.08.2011 - 13:26) _mitya написал(а):
вооо, спасибо!!!!
огромное спасибо.
я ж как раз это и просил, а мне весь код начали исправлять

Спустя 13 минут, 36 секунд (16.08.2011 - 13:40) _mitya написал(а):
Цитата (Renden @ 16.08.2011 - 09:30)
_mitya
Наверно заместо strtolower надо mb_strtolower happy.gif

если написать "письмо" - найдет, "Письмо" тоже. а вот "ПИСЬМО" не находит.
что-то можно еще сделать?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.