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

Форум PHP

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

 

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

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

тема: Изменение регистра
 
 автор: Незнайка   (16.04.2008 в 18:00)   письмо автору
 
 

Еще раз здрасти.

Игорь Вячеславович в Вашей книге ("Головоломки для хакера - 2") нашел интересный скрипт

<?php 
  $text 
"ПРОГРАММИРОВАНИЕ - это ИСКУССТВО. ".
          
"Ему и ЖИЗНЬ посвятить не жалко."
  
$text preg_replace_callback
          
"|[А-Я]{2,}|"
          
"replace_text"
          
$text); 
  echo 
$text
  function 
replace_text($matches
  { 
    return 
substr($matches[0],0,1).strtolower(substr($matches[0],1)); 
  } 
?>



Хочу прикрутить его к файлу форума util.post (чтобы в названиях тем "$theme" и в сообщениях тем "$postbody" порядок был) а как сделать не пойму.
Если не трудно подскажите пожалуйста.

   
 
 автор: cheops   (17.04.2008 в 13:51)   письмо автору
 
   для: Незнайка   (16.04.2008 в 18:00)
 

Ммм... а что вызывает затруднение?

   
 
 автор: Незнайка   (17.04.2008 в 14:25)   письмо автору
 
   для: cheops   (17.04.2008 в 13:51)
 

Пытался методом тыка, (Про программирование убрал, переменные назвал $theme и $postbody соответственно ) но Увы...



<?
// Обрабатываем теги ,, и 
    
$theme preg_replace_callback(
              
"|([a-zа-я\d!]{35,})|i",
              
"split_text",
              
$theme);
    
$theme htmlspecialchars($theme);
    
$theme preg_replace("#\[b\](.+)\[\/b\]#iU",'<b>\\1</b>',$theme);
    
$theme preg_replace("#\[i\](.+)\[\/i\]#iU",'<i>\\1</i>',$theme);
    
$theme str_replace("`","'",$theme);
    
// Здесь пытался вставить Ваш скрипт
    
return $theme;
?>



Потом здесь

<?
// Тэги
    
$postbody preg_replace("#\[b\](.+)\[\/b\]#isU",'<b>\\1</b>',$postbody);
    
$postbody preg_replace("#\[i\](.+)\[\/i\]#isU",'<i>\\1</i>',$postbody);
    
$postbody preg_replace("#\[url\][\s]*((?=http:)[\S]*)[\s]*\[\/url\]#si",'<a href="\\1" target=_blank>\\1</a>',$postbody);
    
$postbody preg_replace("#\[url\][\s]*((?=https:)[\S]*)[\s]*\[\/url\]#si",'<a href="\\1" target=_blank>\\1</a>',$postbody);
    
$postbody preg_replace("#\[url\][\s]*((?=ftp:)[\S]*)[\s]*\[\/url\]#si",'<a href="\\1" target=_blank>\\1</a>',$postbody);
    
$postbody preg_replace("#\[url[\s]*=[\s]*((?=http:)[\S]+)[\s]*\][\s]*([^\[]*)\[/url\]#isU",
                             
'<a href="\\1" target=_blank>\\2</a>',
                             
$postbody);
                              
// Здесь пытался вставить Ваш скрипт
    
return $postbody;

?>


Ну вобщем где, как правильно вставить я не знаю

   
 
 автор: mihdan   (18.04.2008 в 15:51)   письмо автору
 
   для: Незнайка   (17.04.2008 в 14:25)
 


<?
$postbody 
preg_replace("#\[b\](.+)\[\/b\]#isU",'<b>\\1</b>',$postbody);
    
$postbody preg_replace("#\[i\](.+)\[\/i\]#isU",'<i>\\1</i>',$postbody);
    
$postbody preg_replace("#\[url\][\s]*((?=http:)[\S]*)[\s]*\[\/url\]#si",'<a href="\\1" target=_blank>\\1</a>',$postbody);
    
$postbody preg_replace("#\[url\][\s]*((?=https:)[\S]*)[\s]*\[\/url\]#si",'<a href="\\1" target=_blank>\\1</a>',$postbody);
    
$postbody preg_replace("#\[url\][\s]*((?=ftp:)[\S]*)[\s]*\[\/url\]#si",'<a href="\\1" target=_blank>\\1</a>',$postbody);
    
$postbody preg_replace("#\[url[\s]*=[\s]*((?=http:)[\S]+)[\s]*\][\s]*([^\[]*)\[/url\]#isU",
                             
'<a href="\\1" target=_blank>\\2</a>',
                             
$postbody); 

$postbody preg_replace_callback
          
"|[А-Я]{2,}|"
          
"replace_text"
          
$postbody); 
  echo 
$postbody
  function 
replace_text($matches
  { 
    return 
substr($matches[0],0,1).strtolower(substr($matches[0],1)); 
  } 

   
 
 автор: Незнайка   (18.04.2008 в 16:43)   письмо автору
 
   для: mihdan   (18.04.2008 в 15:51)
 

Нет, не "пашет"

Что-то другое по ходу....

   
 
 автор: mihdan   (19.04.2008 в 22:03)   письмо автору
 
   для: Незнайка   (18.04.2008 в 16:43)
 

Если на хостинге юзаете - возможно не установлена русская локаль


setlocale();

   
 
 автор: Незнайка   (20.04.2008 в 12:37)   письмо автору
 
   для: mihdan   (19.04.2008 в 22:03)
 

Нет, не помогло.

Посмотрите у меня правильно записано?
setlocale(LC_ALL, '');
 error_reporting(E_ALL & ~E_NOTICE); 


Пишет ошибка в 107 строке.
Там у меня: $postbody);


Привожу часть кода с того момента где пытаемся добавить:


<?
$postbody 
preg_replace_callback
          
"|[А-Я]{2,}|"
          
"replace_text"
          
$postbody);  ## Здесь  показывает ошибка ##
  
echo $postbody
  function 
replace_text($matches
  { 
    return 
substr($matches[0],0,1).strtolower(substr($matches[0],1)); 
  }  
    return 
$postbody## Здесь не может быть ошибки? (два раза подряд return) ##
  
}
  function 
cpp_highlight($document)
  {
    
// Преобразуем угловые скобки, для отображения HTML-тэгов
?> 

   
 
 автор: Киналь   (20.04.2008 в 13:17)   письмо автору
 
   для: Незнайка   (20.04.2008 в 12:37)
 

>Посмотрите у меня правильно записано?

Неправильно) Напишите так:
setlocale(LC_ALL, '');
error_reporting(E_ALL);



>Пишет ошибка в 107 строке.
>Там у меня: $postbody);

Каков точный текст ошибки?

   
 
 автор: Незнайка   (20.04.2008 в 13:48)   письмо автору
 
   для: Киналь   (20.04.2008 в 13:17)
 

Спасибо, поправил

>> Каков точный текст ошибки?

Щас, гляну...

Во, как ругается:

Warning: preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, 'replace_text', to be a valid callback in Z:\home\localhost\www\for\utils\utils.posts.php on line 107
ПРИВЕТ


Подскажите пожалуйста, кто знает где исправить


<?
   
// Тэги
## Для коррект. отображ. скрипта ## $postbody = preg_replace("#\[b\](.+)\[\/b\]#isU",'<b>\\1</b>',$postbody);
   ## $postbody = preg_replace("#\[i\](.+)\[\/i\]#isU",'<i>\\1</i>',$postbody);
    ##$postbody = preg_replace("#\[url\][\s]*((?=http:)[\S]*)[\s]*\[\/url\]#si",'<a href="\\1" target=_blank>\\1</a>',$postbody);
    ##$postbody = preg_replace("#\[url\][\s]*((?=https:)[\S]*)[\s]*\[\/url\]#si",'<a href="\\1" target=_blank>\\1</a>',$postbody);
    ##$postbody = preg_replace("#\[url\][\s]*((?=ftp:)[\S]*)[\s]*\[\/url\]#si",'<a href="\\1" target=_blank>\\1</a>',$postbody);
    ##$postbody = preg_replace("#\[url[\s]*=[\s]*((?=http:)[\S]+)[\s]*\][\s]*([^\[]*)\[/url\]#isU",
                             
'<a href="\\1" target=_blank>\\2</a>',
                             
$postbody); 

$postbody preg_replace_callback
          
"|[А-Я]{2,}|"
          
"replace_text"
          
$postbody); 
  echo 
$postbody
  function 
replace_text($matches
  { 
    return 
substr($matches[0],0,1).strtolower(substr($matches[0],1)); 
  }  
    return 
$postbody;
  }
  function 
cpp_highlight($document)
  {
    
// Преобразуем угловые скобки, для отображения HTML-тэгов
    
?>



Все кина не будет, электрич. кончилось,
Комп щас зажмурится.........

   
 
 автор: Незнайка   (21.04.2008 в 19:38)   письмо автору
 
   для: Незнайка   (20.04.2008 в 13:48)
 

?

   
 
 автор: Atheist   (21.04.2008 в 19:42)   письмо автору
 
   для: Незнайка   (21.04.2008 в 19:38)
 

При таком коде такого быть не может.

   
 
 автор: Незнайка   (22.04.2008 в 17:43)   письмо автору
 
   для: Atheist   (21.04.2008 в 19:42)
 

>> При таком коде такого быть не может

А, что конкретно Вы имеете ввиду ?
Не комментарии случаем?
Или вообще неправильно записано?

   
 
 автор: Atheist   (23.04.2008 в 00:10)   письмо автору
 
   для: Незнайка   (22.04.2008 в 17:43)
 

> А, что конкретно Вы имеете ввиду ?
Ну, во-первых, конечно, из-за переноса строки вот тут:
> '<a href="\\1" target=_blank>\\2</a>',
> $postbody);
код не будет выполняться, потому что это синтаксическая ошибка.

Во-вторых (это и основное, что мне не понравилось), у тебя определена callback-функция. Она имеет название "replace_text" и такой же аргумент передан preg_replace_callback. Кириллических букв вроде нет (по крайней мере везде одинаково написано), а выдается ошибка, характерная для случая, когда callback-функция не найдена. То, что она определяется в коде после preg_replace_callback значения не имеет.

P.S. Кстати, запись
> return $postbody;
вне тела функции означает, что код будет завершен в этом месте. Однако, код подпрограммы, в качестве которой может выступать код файла, который подключили с помощью require/include.

Например:

Файл include.php:

<?php
return 'value';
?>


Файл main.php:

<?php
echo include('include.php'); // value
?>

   
 
 автор: Незнайка   (23.04.2008 в 10:37)   письмо автору
 
   для: Atheist   (23.04.2008 в 00:10)
 

Интересно...

> '<a href="\\1" target=_blank>\\2</a>',
> $postbody);


>> код не будет выполняться, потому что это синтаксическая ошибка. Это работает. (Вообще то конечно интересно для чего Игорь Вячеславович переменную, не в первый раз на след. строчку переносит?)

Как только я пытаюсь вставить после этого то, что мне хотелось бы (Скрипт из книги вверху. Кстати рабочий, проверял)
Тут начинаются проблемы. Я точно не знаю что, куда нужно вставить (Может Подмогнёте? А то я чувствую, самостоятельно до пенсии не разберусь)

   
 
 автор: Atheist   (23.04.2008 в 12:27)   письмо автору
 
   для: Незнайка   (23.04.2008 в 10:37)
 

Ну насчет комментариев: забей, это мог форум перенести на след. строку.

У тебя проблема в другом. Убери абсолютно все лишнее: оставь только preg_replace_callback и replace_text. И тогда посмотри.

   
 
 автор: Незнайка   (23.04.2008 в 13:11)   письмо автору
 
   для: Atheist   (23.04.2008 в 12:27)
 

>> Убери абсолютно все лишнее: оставь только preg_replace_callback и replace_text. И тогда посмотри.
Знать бы еще, что лишнее : )
Ладно. Щас что-то, где-то, поверну...

Так, что ли ?

<?
$postbody 
preg_replace_callback
          
"|[А-Я]{2,}|"
          
"replace_text"
          
$postbody); 
  echo 
$postbody
  function 
replace_text($matches)
?>


Или так ?

<?
$postbody 
preg_replace_callback
  function 
replace_text($matches)
?>



А что же в нижний рег. будет переводить?
Ведь мы удалили:
<?
return substr($matches[0],0,1).strtolower(substr($matches[0],1));  
?>



Или мы для эксперимента удаляем?
Ошибку ищем?



P.S. В оригинал. записана переменная со след. строчки и все работает.

   
 
 автор: Atheist   (23.04.2008 в 14:25)   письмо автору
 
   для: Незнайка   (23.04.2008 в 13:11)
 

Ясное дело, что надо оставить функции, а не какую-то чушь.

<?php
$postbody 
'СТРОКА';
$postbody preg_replace_callback('|[А-Я]{2,}|''replace_text'$postbody);  

function 
replace_text($matches)  
{  
    return 
substr($matches[0],0,1).strtolower(substr($matches[0],1));  
}

echo 
$postbody;
?>

   
 
 автор: Незнайка   (23.04.2008 в 14:32)   письмо автору
 
   для: Atheist   (23.04.2008 в 14:25)
 

Спасибо, попробую...

Попробовал
Скрипт Работает.

Хочу Вас спросить. Можно ли справиться со следующей проблемкой.
Вот например пишет посетитель вот так: ПрИвЕТ МиР! Желаю ВсЕм УСПехоВ и Т. п.
А нужно привести в порядок эти строки, вот так "Привет мир! Желаю всем успехов и т.п.
Это возможно?

P.S. Пока я писал модератор что-то удалил. Если сказали, что-то не хорошее в мой адрес придется повториться. Ожидаю

   
 
 автор: Atheist   (23.04.2008 в 15:58)   письмо автору
 
   для: Незнайка   (23.04.2008 в 14:32)
 

Я ничего не говорил. По-моему, удалили твои пустые посты с точками.

   
 
 автор: Незнайка   (23.04.2008 в 17:17)   письмо автору
 
   для: Atheist   (23.04.2008 в 15:58)
 

>> Я ничего не говорил.
Это радует.

Ну а по вопросу выше, что Скажете. Есть решение?

   
 
 автор: Atheist   (23.04.2008 в 17:22)   письмо автору
 
   для: Незнайка   (23.04.2008 в 17:17)
 

Решение, в принципе, есть, но я не буду его публиковать.

   
 
 автор: Незнайка   (23.04.2008 в 17:58)   письмо автору
 
   для: Atheist   (23.04.2008 в 17:22)
 

>> Решение, в принципе, есть, но я не буду его публиковать.
OK

   
 
 автор: ONYX   (23.04.2008 в 11:16)   письмо автору
 
   для: Незнайка   (20.04.2008 в 13:48)
 


<?
$postbody 
preg_replace_callback
          
"|[А-Я]{2,}|"
          
"replace_text"
          
$postbody); 
  echo 
$postbody
  function 
replace_text($matches
  { 
    return 
substr($matches[0],0,1).strtolower(substr($matches[0],1)); 
  }  
  return 
$postbody//конкретно эта часть мне непонятна что и куда пытаются вернуть?
  
}
?>

   
 
 автор: Незнайка   (23.04.2008 в 11:34)   письмо автору
 
   для: ONYX   (23.04.2008 в 11:16)
 

>> return $postbody; //конкретно эта часть мне непонятна что и куда пытаются вернуть?

Мне тоже не понятно.
Удаляю эту строчку и пробую все равно не работает.
Я же писал: если бы я знал куда, что нужно пристроить...
А так...
Думаю, что ошибки есть и еще.
Скрипт целиком сюда загрузить не могу (utils.posts LiteForum) в этом скрипте идет обработка [code] и т.п. (не корректно отображается)
Если есть желание помочь можете сверху посмотреть прикрепленный файл. Возможно получится разобраться, как эту функцию внедрить. Буду очень признателен Всем, кто сможет помочь

   
 
 автор: mihdan   (23.04.2008 в 13:21)   письмо автору
 
   для: Незнайка   (16.04.2008 в 18:00)
 

http://htmlbook.ru/css/text-transform.html

   
 
 автор: Незнайка   (23.04.2008 в 13:49)   письмо автору
 
   для: mihdan   (23.04.2008 в 13:21)
 

Вопрос снят, Тему можно закрыть

   
Rambler's Top100
вверх

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