Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Personaliznacja tekstu, Czyli jak uniknać 'widziałeś/aś' ?
Mery
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 18.01.2004
Skąd: Ostrów Wlkp.

Ostrzeżenie: (0%)
-----


Mam taki problem. Nie wiem jak zrobic taki skrypcik, ktory personalizowal by jakis tekst w zaleznosci od plci czytajacego.

Mozna by pisac tekst np w taki sposob:

Kod
Czy widział[eś/aś] ten dom?


i jakis sprypcik na podstawie chyba najlepiej wyrazenia regularnego zamienial by ten nawias [eś/aś] na eś jesli czytajacy to M lub aś jesli czytajacy do K.

Niestety na wyrazeniach regularnych sie nie znam (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Czy ktos wie jak takie cos napisac (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
vala
post
Post #2





Grupa: Zarejestrowani
Postów: 123
Pomógł: 0
Dołączył: 12.01.2005

Ostrzeżenie: (0%)
-----


pisz w formie bezosobowej:)
Go to the top of the page
+Quote Post
Morek
post
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 28.05.2005

Ostrzeżenie: (0%)
-----


można zrobić skrypt ktory "na dzień dobry" zadawałby pytanie pan jest czy pani (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) a potem tego używał ale szczerze nie widze powodu... zabawa chyba nie jest warta świeczek.

Problem również zniknie gdy będzie logowanie na strone, ale tylko dla userów.

Lub tak jak mówi Vala pisz bezosobowo
Go to the top of the page
+Quote Post
kicaj
post
Post #4





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

Ostrzeżenie: (0%)
-----


Jesli masz logowanie (konta uzytkownikow itp) to tam ustaw wymagane pole na plec. Pozniej bedziesz odpowiednim wyrazeniem strosowal 'widzial[as|es]'. Zakladajac ze pierwsza czesc jest dla chlopcow, a druga dla dziewczat:)

P.S. W podobnym stylu jak stosuje WikiMedia (np. http://wiki.php.pl) tyle, ze do linkow.
Go to the top of the page
+Quote Post
Mery
post
Post #5





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 18.01.2004
Skąd: Ostrów Wlkp.

Ostrzeżenie: (0%)
-----


To wlasnie wiem, chodzi mi tylko o to odpowiednie wyrazenie (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Plec uzytkownika mam, teraz tylko trzeba wlasnie jakos zamienic koncowke na meska lub zenska i nie wiem jak to zrobic (IMG:http://forum.php.pl/style_emoticons/default/sadsmiley02.gif)
Go to the top of the page
+Quote Post
vala
post
Post #6





Grupa: Zarejestrowani
Postów: 123
Pomógł: 0
Dołączył: 12.01.2005

Ostrzeżenie: (0%)
-----


oznacz sobie string, ktory ma zamieniac w jakis specjalny sposob np:
<plec>

czyli bedzie cos takiego napisa<plec>(ł/ła)
i mozesz zastosowac preg_replace lub str_replace
ja bym info o plci wrzucil do sesji czy ciastek i na podstawie tego zamienial...
Go to the top of the page
+Quote Post
Mery
post
Post #7





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 18.01.2004
Skąd: Ostrów Wlkp.

Ostrzeżenie: (0%)
-----


Zrobilem takie cos, dziala ale tylko wtedy gdy w tekscie jest tylko jeden raz forma osobowa:

  1. <?
  2. function personalizuj($string, $plec){  
  3.  
  4.  preg_match('/<(.*)!(.*)>/',$string, $koncowka);
  5.  
  6.  $wynik = preg_replace('/<(.*)!(.*)>/',$koncowka[$plec],$string);
  7.  
  8.  return $wynik;
  9.  
  10. }
  11.  
  12. $string = 'Czy chciał<byś!abyś> mieć taki dom?';
  13.  
  14.  
  15. echo personalizuj($string, 1);
  16.  
  17. ?>


jesli parametr plec wynosi 1 to daje pierwsza koncowke (meska) a jesli 2 to daje 2 koncowke. Niestety totanie nie dziala jesli w tekscie musi kilka razy zamienic koncowki.

Nie wiem w jaki sposob wyseparowac te koncowki z tekstu (IMG:http://forum.php.pl/style_emoticons/default/sadsmiley02.gif)

Ma ktos jakis pomysl jak by to mialo wygladac (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
tiraeth
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


to zamień preg_match na preg_match_all i potem zrób to samo ale w pętli (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

poza tym lepiej zrobić taki string:
Kod
Czy chciał<!a>być mieć taki dom?


A spróbuj z tym wyrazem: mógłbyś
Go to the top of the page
+Quote Post
Mery
post
Post #9





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 18.01.2004
Skąd: Ostrów Wlkp.

Ostrzeżenie: (0%)
-----


Nie bardzo kumam gdzie tu wcisnac petle, jakies dziwne rzeczy mi wychodza.

Mógłbyś napisac kod jak to powinno wygladac (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
tiraeth
post
Post #10





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Proszę bardzo (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Gotowa funkcja:
  1. <?php
  2. function personalizuj($string, $plec)
  3. {
  4.  $wzor = '/<([a-z]{0,})!([a-z]{0,})>/';
  5.  
  6.  if(preg_match_all($wzor, $string, $koncowki))
  7.  {
  8. $wynik = str_replace($koncowki[0], $koncowki[$plec], $string);
  9.  }
  10.  
  11.  return $wynik;
  12. }
  13. ?>


Zmieniłem trochę wyrażenie regularne. I zamieniamy nie preg_replace'm tylko str_replace'm (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
matid
post
Post #11





Grupa: Zarejestrowani
Postów: 362
Pomógł: 0
Dołączył: 18.02.2004
Skąd: Knurów

Ostrzeżenie: (0%)
-----


Niestety, przy polskich znakach [a-z] chyba nie przejdzie, a przy kodowaniu np utf-8 na 100% będą błędy. A tak wogóle, to po co tak komplikować tę funkcję, jakieś nie potrzebne preg_match_all, nie rozumiem tego. Nie można tak:

Coś się kolorowanie sypie, ale kod dziala:
Kod
<?php

    function personalize( $sString, $iGender )
    {
        return preg_replace( '/\<(\S*)\!(\S*)\>/', '\\' . (int) $iGender, (string) $sString );
    }
    
    $sString = 'Czy chciał<byś!abyś> mieć taki dom? Czy m<ógł!ogła>byś kupić mleko?';
    
    echo '<strong>Mężczyzna:</strong></br />';
    echo personalize( $sString, 1 );
    echo '<br /><strong>Kobieta:</strong><br />';
    echo personalize( $sString, 2 );
    
?>


Ten post edytował matid 21.07.2005, 13:03:28
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 16:08