Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Undefined offset и кодировка
 
 автор: Лена   (10.09.2008 в 12:30)   письмо автору
 
 


<?php
setlocale 
(LC_ALL, array ('ru_RU.CP1251''rus_RUS.1251'));
$header '<a href="/news/1819.html">жертвам аферистов придется еще подождать обещанного жилья</a>05.09.2008<br><a href="/news/1818.html">ДОЛЛАР ВЕРНЕТСЯ НА РЫНОК ЖИЛЬЯ?</a>05.09.2008<br><a href="/news/1817.html">киевскому мэру надо меньше районов</a>05.09.2008<br><a href="/news/1822.html">новая линия метро</a>05.09.2008<br><a href="/news/1821.html">ИТОГИ ПЕРВОГО АУКЦИОНА В СЕВАСТОПОЛЕ</a>05.09.2008<br><a href="/news/1820.html">львов вновь продает землю</a>05.09.2008<br><a href="/news/1816.html">отменены два землеотвода</a>04.09.2008<br>';

$header explode("<br>"$header);
for(
$i 0;$i<count($header);$i++){
$title $header[$i];
$title explode("</a>"$header[$i]);
    
//так как в массиве всего два элемента, новый цикл for не нужен
    
$date $title[1];
    
$head $title[0] . "</a>";
    
$head strtoupper($head);
    echo 
"<table>    
                <tr>
                    <td>" 

                    
$date " " .             
                    
"</td>
                    <td>"
                    
$head 
                    
"</td>
                </tr>
            </table>"
;
}
?>


1 Вопрос: после загрузки скрипта появляется:
Notice: Undefined offset: 1 in w:\home\avart.ua\www\asd.php on line 10
10 линия - $date = $title[1];
Как это убрать?

2 Вопрос:
Когда буквы переводятся в верхний регистр, устанавливается японская кодировка. Когда в нижний регистр - все нормально, кириллица. Мне нужен именно верхний

  Ответить  
 
 автор: Киналь   (10.09.2008 в 12:40)   письмо автору
 
   для: Лена   (10.09.2008 в 12:30)
 

>1 Вопрос: после загрузки скрипта появляется:
>Notice: Undefined offset: 1 in w:\home\avart.ua\www\asd.php on line 10
>10 линия - $date = $title[1];
>Как это убрать?

Убрать - с помощью @:

@$date = $title[1];

А исправить - с помощью анализа содержимого переменной $title. То есть сделайте

print_r($title);

и посмотрите, соответствует ли оно вашим ожиданиям.

  Ответить  
 
 автор: Trianon   (10.09.2008 в 12:40)   письмо автору
 
   для: Лена   (10.09.2008 в 12:30)
 

1. Поскольку последний <br> находится в конце строки, то последний элемент массива $header у Вас пустой.
Соответственно, нужно вместо
$title = $header[$i];
которое никак не используется, написать
 if($header[$i] == '') break; 

чтобы не гонять цикл для пустого элемента.

2. Значит локаль стоит какая-то не та. Этот вопрос надежнее выяснить у хостера.

  Ответить  
 
 автор: Лена   (10.09.2008 в 13:17)   письмо автору
 
   для: Trianon   (10.09.2008 в 12:40)
 

распечатала массив print_r ($header), действительно, один элемент - пустой и из-за этого ошибка, все поняла, все исправила.
Только интересно, если гонять цикл для пустого элемента, на чем это сказывается? Догадываюсь, но хотелось бы вас послушать.

>Этот вопрос надежнее выяснить у хостера.
Вопрос выяснила с sim`ом. Тоже надежно. :-) Сделала вот так: setlocale(LC_CTYPE, "ru_RU.CP1251");

  Ответить  
 
 автор: Trianon   (10.09.2008 в 13:24)   письмо автору
 
   для: Лена   (10.09.2008 в 13:17)
 

>Только интересно, если гонять цикл для пустого элемента, на чем это сказывается? Догадываюсь, но хотелось бы вас послушать.
Когда логика тела цикла предусматривает работу с пустым элементом - отчего не прогнать.
Но, если мне не изменяет память, там следующей же строкой Вы пытаетесь разбить [этот пустой] элемент по разделителю </a> на две части? Как Вы это себе представляете?

  Ответить  
 
 автор: Лена   (10.09.2008 в 13:35)   письмо автору
 
   для: Trianon   (10.09.2008 в 13:24)
 

Вопросов больше нет. Спасибо.

  Ответить  
 
 автор: xx77   (10.09.2008 в 13:06)   письмо автору
 
   для: Лена   (10.09.2008 в 12:30)
 

на денвере, если смотреть значение до и после такого setlocale() скриптом
<?php header('Content-type:text/html; charset=windows-1251');
print_r(setlocale(LC_ALL0));
echo 
'<pre>' strtoupper('значение скриптом') . '<hr>';

setlocale (LC_ALL, array ('ru_RU.CP1251''rus_RUS.1251'));
print_r(setlocale(LC_ALL0));
echo 
'<hr>' strtoupper('значение скриптом') . '<hr>';
?>

получаются разные строки, но одинаковый результат функции
LC_COLLATE=C;LC_CTYPE=Russian_Russia.1251;LC_MONETARY=C;LC_NUMERIC=C;LC_TIME=C
ЗНАЧЕНИЕ СКРИПТОМ
Russian_Russia.1251
ЗНАЧЕНИЕ СКРИПТОМ

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования