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

Форум PHP

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

 

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

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

тема: str_replace - как это сделать???
 
 автор: m@rchello   (08.01.2006 в 09:03)   письмо автору
 
 

Хочу с помощью str_replace сделать замену смайликов в гостевой книге!!!
И впринципе это получалось когда я прописывал str_replace непосредственно для каждого смайлика, тоесть так

<?php
$msg
=str_replace("*чмок","<a href=# onClick=\"javascript:tag(' *чмок ',''); return false\" href=#><img src='smail/chmok.gif'></a>","$msg");
$msg=str_replace("*лол","<a href=# onClick=\"javascript:tag(' *лол ',''); return false\" href=#><img src='smail/lol.gif'></a>","$msg");
$msg=str_replace("*ы","<a href=# onClick=\"javascript:tag(' *ы ',''); return false\" href=#><img src='smail/i.gif'></a>","$msg");
$msg=str_replace("*1ы","<a href=# onClick=\"javascript:tag(' *1ы ',''); return false\" href=#><img src='smail/1i.gif'></a>","$msg");
$msg=str_replace("*куку","<a href=# onClick=\"javascript:tag(' *куку ',''); return false\" href=#><img src='smail/kuku.gif'></a>","$msg");
?>

Но это стало ужасно неудобно! Потому что при добавлении нового смайлика мне приходилось вручную дописывать эти строки в guest.php и я решил сделать это так

<?php
$smailik
=@file($smail_base);
$sm_long=count($smailik)-1;
for(
$sm=$sm_long;$sm>=0;$sm--)
{
list(
$show_smail,$zap_smail)=explode("||",$smailik[$sm]);
 
$msg=str_replace("$zap_smail","$show_smail","$msg");
}
?>

Но так почему то не работает!!! Точнее сказать работает но не доконца как надо!!!
Смайлы выводятся не все а лишь некоторые! И ссылки в форму то же почемуто не работают!!!
подскажите пожалуйста в чём причина или как это сделать подругому!!!
Все эти операции проводятся в 236-242 строчках файла guest.php

   
 
 автор: cheops   (08.01.2006 в 12:54)   письмо автору
 
   для: m@rchello   (08.01.2006 в 09:03)
 

А какова структура файла $smail_base?

   
 
 автор: m@rchello   (08.01.2006 в 12:57)   письмо автору
 
   для: cheops   (08.01.2006 в 12:54)
 

вот такая

<a href=# onClick=\"javascript:tag(' :) ',''); return false\" href=#><img src='smail/1.gif' alt=':)'></a>||:)
<a href=# onClick=\"javascript:tag(' :-) ',''); return false\" href=#><img src='smail/1).gif' alt=':-)'></a>||:-)
<a href=# onClick=\"javascript:tag(' :( ',''); return false\" href=#><img src='smail/2.gif' alt=':('></a>||:(
<a href=# onClick=\"javascript:tag(' *1ы ',''); return false\" href=#><img src='smail/1i.gif' alt='*1ы'></a>||*1ы
<a href=# onClick=\"javascript:tag(' *чмок ',''); return false\" href=#><img src='smail/chmok.gif' alt='*чмок'></a>||*чмок
<a href=# onClick=\"javascript:tag(' *ы ',''); return false\" href=#><img src='smail/i.gif' alt='*ы'></a>||*ы

   
 
 автор: cheops   (08.01.2006 в 13:10)   письмо автору
 
   для: m@rchello   (08.01.2006 в 12:57)
 

Понятно... вынесите строку
<?php
  
list($show_smail,$zap_smail)=explode("||",$smailik[$sm]);
?>

из массива не гоже на каждом цикле производить преобразования, а после этой строки добавьте код
<?php
  
for($i 0$i count($zap_smail); $i++) $zap_smail[$i] = trim($zap_smail[$i]);
?>

Дело в том, что если файл создавался в Windows, то строки заканчиваются последовательностью \r\n, в UNIX принята последовательность \n и функция file() не расчитывает на невидимый символ \r, оставляя его в строке - он и мешает нормальному преобразованию смайликов.

   
 
 автор: m@rchello   (08.01.2006 в 13:26)   письмо автору
 
   для: cheops   (08.01.2006 в 13:10)
 

Всмысле вынести эту строку????
Покажите пожалуйста на этом кусочке кода

<?php 
$smailik
=@file($smail_base); 
$sm_long=count($smailik)-1
for(
$sm=$sm_long;$sm>=0;$sm--) 

list(
$show_smail,$zap_smail)=explode("||",$smailik[$sm]); 
$msg=str_replace("$zap_smail","$show_smail","$msg"); 

?>

   
 
 автор: cheops   (08.01.2006 в 13:31)   письмо автору
 
   для: m@rchello   (08.01.2006 в 13:26)
 

Я вот что имею ввиду
<?php 
$smailik
=@file($smail_base); 
$sm_long=count($smailik)-1
list(
$show_smail,$zap_smail)=explode("||",$smailik[$sm]); 
for(
$i 0$i count($zap_smail); $i++) $zap_smail[$i] = trim($zap_smail[$i]);
for(
$sm=$sm_long;$sm>=0;$sm--) 

  
$msg=str_replace("$zap_smail","$show_smail","$msg"); 

?>

   
 
 автор: m@rchello   (11.01.2006 в 18:16)   письмо автору
 
   для: cheops   (08.01.2006 в 13:31)
 

извините что так долго не заходил!!! Попробовал как вы показали но почему то не работает!!! Смайлы вообще не показываются и какие-то ошибки выводит да и сервер подвисает!!!! :(

   
 
 автор: cheops   (11.01.2006 в 23:38)   письмо автору
 
   для: m@rchello   (11.01.2006 в 18:16)
 

Хм... странно, а предыдущий ваш скрипт, работает (без зависаний)?

   
 
 автор: m@rchello   (12.01.2006 в 08:36)   письмо автору
 
   для: cheops   (11.01.2006 в 23:38)
 

В этом то и дело что когда я писал у меня тоже вис сервер и когда он всё таки догружал то выводил лишь некоторые смайлы и какие то ошибки! посмотрите в выше прикреплённом архиве! Там именно как я пытался сделать! А как вы показали он виснет и когда догружает страницу то смайлов нет вообще!!!

   
 
 автор: cheops   (12.01.2006 в 11:20)   письмо автору
 
   для: m@rchello   (12.01.2006 в 08:36)
 

А какие ошибки выводил сервер?

   
 
 автор: m@rchello   (12.01.2006 в 11:36)   письмо автору
 
   для: cheops   (12.01.2006 в 11:20)
 

извиняюсь я не про то сказал всмысле в моём варианте все норм работает просто смайлы не все отображаются и ссылки для добавления смайла в форму не работают!!
А вот в вашем варианте такие
Notice: Undefined variable: sm in x:\home\test.ru\www\guest.php on line 238

Notice: Undefined index: in x:\home\test.ru\www\guest.php on line 238

Notice: Undefined offset: 1 in x:\home\test.ru\www\guest.php on line 238

   
 
 автор: cheops   (12.01.2006 в 11:46)   письмо автору
 
   для: m@rchello   (12.01.2006 в 11:36)
 

Опа... а я и не заметил, что вы ссылаетесь на элемент массива, тогда давайте всё обратно в цикл поместим, в общем, код в моём представлении должен выглядеть следующим образом:
<?php 
$smailik
=@file($smail_base); 
$sm_long=count($smailik)-1
for(
$sm=$sm_long;$sm>=0;$sm--) 

  list(
$show_smail,$zap_smail)=explode("||",$smailik[$sm]); 
  
$zap_smail trim($zap_smail); 
  
$msg=str_replace("$zap_smail","$show_smail","$msg"); 

?>

   
 
 автор: m@rchello   (12.01.2006 в 11:58)   письмо автору
 
   для: cheops   (12.01.2006 в 11:46)
 

Вот теперь всё хорошо выводится и грузится но смайлы всёравно не добавляются в форму!

   
 
 автор: m@rchello   (12.01.2006 в 12:04)   письмо автору
 
   для: cheops   (12.01.2006 в 11:46)
 

Всё разобрался с ссылками!! :-) Спасибо вам огромное!!! :-)

   
Rambler's Top100
вверх

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