Smiliebregrenzung per PHP

  • Smiliebregrenzung per PHP

    Hallöchen.

    wie bekommt man eine Smiliebegrenzung hin, das er Z.b. nur 3Smilies ausgibt, aber nach den 3ten nicht noch den text von den Smilies...

    Z.b.

    bei 3er begrenung:

    Hallo : ) : ) : ) : ) : ) : ) : ) : ) : ) , wie gehts?

    Hallo :) :) :) , wie gehts?

    Wie geschrieben darf er die weiteren smilietexte nicht angeben.

    Hab mal ein code zusammengebaut, aber bekomm es damit nicht hin...

    Quellcode

    1. $count = 0;
    2. IF($current_user->smilie == "0") {
    3. $abfrag = 'SELECT * FROM icc_smilie WHERE chat = "'.$chatadresse.'"';
    4. $abfrage = mysql_query($abfrag);
    5. while ($row = mysql_fetch_object($abfrage)) {
    6. if ($begrenzung77 == 0) {
    7. $message = str_replace("$row->text","<img src=\"$imagespath/smilies/$row->image\" border=\"0\" title=\"$row->text 1\">",$message);
    8. } else {
    9. if ($row->groesse < $begrenzungzahl77) {
    10. $message = str_replace("$row->text","<img src=\"$imagespath/smilies/$row->image\" border=\"0\" title=\"$row->text 2\">",$message);
    11. } else {
    12. $message = str_replace("$row->text","<img src=\"$imagespath/smilies/$row->image\" border=\"0\" height =\"$begrenzungzahl77\" title=\"$row->text\">",$message);
    13. }}}}
    Alles anzeigen


    Greets
  • Hoffe das hilft dir.
    Übrigens, wie ich sehe holst du die Daten aus einer Datebank, also würde ich schon vor dem schreiben in die Datenbank, die überflüssigen Smilies entfenren. Sonst hast du ja immer Zeichen in der Datenbank die du garnicht brauchst, außer du willst das irgenwann mal ändern.



    Quellcode

    1. class Smilie {
    2. public function SmilieSwap($string) {
    3. if((substr_count($string, ':)') > 0) && $string != "") {
    4. $smilieSwap = explode(" " ,$string);
    5. if(is_array($smilieSwap)) {
    6. $smilieCount = 0;
    7. foreach($smilieSwap as $key => $value) {
    8. if($value == ':)') {
    9. $smilieCount++;
    10. if($smilieCount > 3) {
    11. unset($smilieSwap[$key]);
    12. }
    13. } else {
    14. $smilieCount = 0;
    15. }
    16. }
    17. $newString = implode(" ", $smilieSwap);
    18. return $newString;
    19. } else {
    20. return false;
    21. }
    22. }
    23. }
    24. }
    Alles anzeigen
  • Hallöchen...

    In der Datenbank sind alle Smilies gelistet die benötigt werden. Nur soll er nur immer 3 Smilies ausgeben und den Rest verschlucken an Smilies, sprich auch nicht die Zeichen dafür ausgeben wie oben beschrieben.

    Bin mal hingegangen und habe die Smilies mal als array setzen lassen.

    Quellcode

    1. $abfrag = 'SELECT * FROM icc_smilie WHERE chat = "'.$chatadresse.'"';
    2. $abfrage = mysql_query($abfrag);
    3. while ($row = mysql_fetch_array($abfrage)) {
    4. $smilu[$row[text]]['smilies'] = $row['image'];
    5. }


    abrufbar nun über:

    Quellcode

    1. $test = ":)";
    2. echo $smilu[$test]['smilies'];


    wo er dann den Pfad zum image gibt.

    greets

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von toxic ()

  • achsooo dafür ist die Datenbank abfrage okay sorry ^^

    Aber das Script was ich oben gebastelt habe, macht (so wie ich das Verstanden habe) genau das was du willst, du musst nur noch ein paar zeilen hinzufügen damit er anstat den text ":)" auch wirklich das Bild anzeigt.Aber das sollte ja kein problem mehr sein.

    (Oder habe ich das jetzt wieder flasch verstanden? ) ^^
  • Hallöchen...

    irgendwie gibt er mir nix aus bei dem script von dir, wenn ich es mit

    Quellcode

    1. $message = "anfang :) dfsdf :) dfsdf :) dffdss :) ende :) ende2";
    2. SmilieSwap("$message");


    ansteuer.

    bei $test soll er also dann statt:

    anfang :) dfsdf :) dfsdf :) dffdss :) ende :) ende2

    dies draus machen:

    anfang :) dfsdf :) dfsdf :) dffdss ende ende2

    und dies dann in

    Quellcode

    1. $sql_befehl = "INSERT INTO icc_chatmessages (user_id, nick, room, timestamp, chat, content, ip) VALUES ('1', '$current_user->login', '$room->id', '$timestamp', '$chatadresse', '$message', '$current_user->ip')";
    2. mysql_query($sql_befehl)or die(mysql_error());


    schreiben.

    greets
  • der fehler liegt bei den " denn du übergibst als string den Text ($message)

    Quellcode

    1. $message = "anfang :) dfsdf :) dfsdf :) dffdss :) ende :) ende2";
    2. $smilie = new Smilie;
    3. $smilie->SmilieSwap($message);
    4. echo $smilie;


    Aber habe jetzt gesehen das bei mir ein fehler ist. Habe verstanden gehabt das du die begrenzeung wie oft man die smilies hintereinander machen darf, festlegen willst.
    Dann muss der gesammte else bereich da weg damit er nur 3 smilies nimmt.

    Also Lösch mal diesen teil aus dem Script raus:

    Quellcode

    1. } else {
    2. $smilieCount = 0;
    3. }


    und änder am anfang die zahl hierzu:

    Quellcode

    1. (substr_count($string, ':)') > 3)


    dann sollte er es dir so ausgegebn wie du es willst
  • Hallöchen...

    Hab jetzt mal im original die ausgabe gestartet:

    "Catchable fatal error: Object of class Smilie could not be converted to string in Z:\www\V1.60\test2.php on line 31"

    und wenn ich die zeilen entferne bekomm ich

    "Catchable fatal error: Object of class Smilie could not be converted to string in Z:\www\V1.60\test2.php on line 29"

    hab das eine

    Quellcode

    1. }


    in

    Quellcode

    1. } else {
    2. $smilieCount = 0;
    3. }


    stehenlassen da er sonst

    Parse error: syntax error, unexpected T_ELSE in Z:\www\V1.60\test2.php on line 19

    rausgibt...

    Script komplett:

    Quellcode

    1. class Smilie {
    2. public function SmilieSwap($string) {
    3. if((substr_count($string, ':)') > 3) && $string != "") {
    4. $smilieSwap = explode(" " ,$string);
    5. if(is_array($smilieSwap)) {
    6. $smilieCount = 0;
    7. foreach($smilieSwap as $key => $value) {
    8. if($value == ':)') {
    9. $smilieCount++;
    10. if($smilieCount > 3) {
    11. unset($smilieSwap[$key]);
    12. }
    13. }
    14. }
    15. $newString = implode(" ", $smilieSwap);
    16. return $newString;
    17. } else {
    18. return false;
    19. }
    20. }
    21. }
    22. }
    23. $message = "anfang :) dfsdf :) dfsdf :) dffdss :) ende :) ende2";
    24. $smilie = new Smilie;
    25. $smilie->SmilieSwap($message);
    26. echo $smilie;
    Alles anzeigen



    var_dump gibt mir "object(Smilie)#1 (0) { }" aus...
    greets

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von toxic ()

  • haha ja mit der } habe ich später auch noch gesehen aber ich dachte mir schon das du selber drauf kommst :)

    änder mal

    Quellcode

    1. $message = "anfang :) dfsdf :) dfsdf :) dffdss :) ende :) ende2"; $smilie = new Smilie;
    2. $smilie->SmilieSwap($message);
    3. echo $smilie;


    in das hier:

    Quellcode

    1. $message = "anfang :) dfsdf :) dfsdf :) dffdss :) ende :) ende2"; $smilie = new Smilie;
    2. echo $smilie->SmilieSwap($message);


    oder in das hier

    Quellcode

    1. $message = "anfang :) dfsdf :) dfsdf :) dffdss :) ende :) ende2"; $smilie = new Smilie;
    2. $test = $smilie->SmilieSwap($message);
    3. echo $test;


    Das $smilie ist ja nur ein object von Smilie, also kannst du $smilie nicht so asugeben.
  • Hallöchen

    Thx, jetzt klappt es... jetzt muss ich nur noch guggern wie ich es hinbekomme, das er auch die anderen smilies mitzählt...

    Sprich:

    :) :) ;) 8) :D

    dann nur

    :) :) ;)

    ausgibt*gggg

    mal eine kleine liste der sql:

    SQL-Abfrage

    1. INSERT INTO `icc_smilie` VALUES (1, 'allgemein/cbb5cd2d808801134082353254439458.gif', '#:)', '15');
    2. INSERT INTO `icc_smilie` VALUES (2, 'allgemein/10b55f3aff368e43ab0ada7e3b4190f8.gif', '#:))', '15');
    3. INSERT INTO `icc_smilie` VALUES (3, 'allgemein/1a1e302f3ea9d9184f9b7dc369b6c18b.gif', '#;)', '15');
    4. INSERT INTO `icc_smilie` VALUES (4, 'allgemein/9d82944be4cdf1a24667ed92402c3f12.gif', '#:(', '15');
    5. INSERT INTO `icc_smilie` VALUES (5, 'allgemein/a7d9ac508d4a7712aceea0ed0263b314.gif', '#:((', '15');
    6. INSERT INTO `icc_smilie` VALUES (6, 'allgemein/7d93d333e95ea4d06697adb7ac1defe2.gif', '#:e', '15');
    7. INSERT INTO `icc_smilie` VALUES (7, 'allgemein/4d96004942f2fb81ed2fcf9ddceda0b4.gif', '#:D', '15');
    8. INSERT INTO `icc_smilie` VALUES (8, 'allgemein/ae82492f4cde93d767befcbf901bbdb0.gif', '#;D', '15');
    9. INSERT INTO `icc_smilie` VALUES (9, 'allgemein/2fbefec7b6c29f7999fe9d00b8282ce2.gif', '#:P', '16');
    10. INSERT INTO `icc_smilie` VALUES (10, 'allgemein/5862563811770e47556b4efd4b67f3a3.gif', '#;P', '15');
    11. INSERT INTO `icc_smilie` VALUES (11, 'allgemein/87f0ace5c46a2937dcb24eb4ee4c7719.gif', '#:X', '15');
    12. INSERT INTO `icc_smilie` VALUES (12, 'allgemein/38bc2b03121dae03e97a73977bd62e55.gif', '#:/', '15');
    13. INSERT INTO `icc_smilie` VALUES (13, 'allgemein/cc55ed5b5ae0887e680827d65feafa47.gif', '#^^', '15');
    14. INSERT INTO `icc_smilie` VALUES (14, 'allgemein/5aff4e8e7d6f15fef710dd05196fffd8.gif', '#:S', '15');
    15. INSERT INTO `icc_smilie` VALUES (15, 'allgemein/f8718b06237a3788f0b21d3f1a7b8f6a.gif', '#:M', '20');
    16. INSERT INTO `icc_smilie` VALUES (16, 'allgemein/a0133de680734b858babb218395e63b9.gif', '#M(', '15');
    17. INSERT INTO `icc_smilie` VALUES (17, 'allgemein/c89e4f2784f448a59d8269543d124188.gif', '#:o', '17');
    18. INSERT INTO `icc_smilie` VALUES (18, 'allgemein/f8079567c92cff71bc274cdd5383c8d7.gif', '#o)', '17');
    19. INSERT INTO `icc_smilie` VALUES (19, 'allgemein/4def05b861f1a04433a035631ee59020.gif', '#8)', '15');
    20. INSERT INTO `icc_smilie` VALUES (20, 'allgemein/df97530386895750e73f3b78671d6ada.gif', '#*)', '20');
    Alles anzeigen


    Über array ist es ja unmöglich, da die texte ja nicht untereinandergesetzt sind... also hab ich es mal so probiert mit der:

    Quellcode

    1. function SmilieSwap($string) {
    2. $abfrag = 'SELECT * FROM icc_smilie WHERE chat = "'.$chatadresse.'"';
    3. $abfrage = mysql_query($abfrag);
    4. while ($row = mysql_fetch_object($abfrage)) {
    5. if((substr_count($string, ':)') > 3) && $string != "") {
    6. $smilieSwap = explode(" " ,$string);
    7. if(is_array($smilieSwap)) {
    8. $smilieCount = 0;
    9. foreach($smilieSwap as $key => $value) {
    10. if($value == ':)') {
    11. $smilieCount++;
    12. if($smilieCount > 3) {
    13. unset($smilieSwap[$key]);
    14. }
    15. }
    16. }
    17. $newString = implode(" ", $smilieSwap);
    18. return $newString;
    19. } else {
    20. return false;
    21. }
    22. }
    23. }
    24. }
    25. $message = "anfang :) dfsdf :) dfsdf :) dffdss :) ende :) ende2";
    26. $smilie = new Smilie;
    27. $message = SmilieSwap($message);
    Alles anzeigen


    nur gibt er mir garnixmehr aus. lass ich die sqlabfrage weg, dann geht es ohne probleme... aber leider nur mit dem einen :) ....

    dieses geht auch nicht:

    Quellcode

    1. function SmilieSwap($string) {
    2. $abfrag = 'SELECT * FROM icc_smilie WHERE chat = "'.$chatadresse.'"';
    3. $abfrage = mysql_query($abfrag);
    4. while ($row = mysql_fetch_object($abfrage)) {
    5. if((substr_count($string, $row->text) > 3) && $string != "") {
    6. $smilieSwap = explode(" " ,$string);
    7. if(is_array($smilieSwap)) {
    8. $smilieCount = 0;
    9. foreach($smilieSwap as $key => $value) {
    10. if($value == $row->text) {
    11. $smilieCount++;
    12. if($smilieCount > 3) {
    13. unset($smilieSwap[$key]);
    14. }
    15. }
    16. }
    17. $newString = implode(" ", $smilieSwap);
    18. return $newString;
    19. } else {
    20. return false;
    21. }
    22. }
    23. }
    24. }
    25. $message = "anfang :) dfsdf :) dfsdf :) dffdss :) ende :) ende2";
    26. $smilie = new Smilie;
    27. $message = SmilieSwap($message);
    Alles anzeigen


    greets

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von toxic ()

  • Was machst du denn, wenn kein Leerzeichen zwischen Buchstabe und Smiley ist?

    Habe hier grade mal was zusammengeschrieben, scheint zu funktionieren:

    Quellcode

    1. function smileys($inputString, $smileys, $limit){
    2. $returnString = "";
    3. $counter = 0;
    4. for($a = 1; $a<=strlen($inputString); $a++){
    5. $s = substr($inputString, 0, $a);
    6. $returnString .= substr($inputString, $a-1, 1);
    7. if( $counter == $limit )
    8. continue;
    9. foreach($smileys as $smiley => $replacement){
    10. if( strpos($returnString, $smiley) === false )
    11. continue;
    12. $counter++;
    13. $returnString = substr_replace($returnString, $replacement, strpos($returnString, $smiley));
    14. }
    15. }
    16. return $returnString
    17. ;
    18. }
    19. var_dump(smileys("Hallo:) ;) :( :( :) :) :( :) :roll:", array(
    20. ":)" => "fu",
    21. ";)" => "fu2",
    22. ":(" => "fu3",
    23. ":roll:" => "fu4"
    24. ), 4));
    Alles anzeigen


    Das Array mit den Smileys würdest du halt mit den Daten aus deiner Datenbank ersetzen, den String am Anfang mit deinem String und das Limit mit deinem Limit, fertig. Ausgabe wäre bei meinem Beispiel diese hier:

    Quellcode

    1. string(38) "Hallofu fu2 fu3 fu3 :) :) :( :) :roll:"
    Jan Thurau
    Software and Systems Engineer
    janthurau.de

    [Blockierte Grafik: http://www.pageheroes.com/media/image/pageheroes_logo.png] - We get your page working!
  • Hallöchen...

    Nur sollte er dann statt von

    Quellcode

    1. var_dump(smileys("Hallo:) ;) :( :( :) :) :( :) :roll: testende", array(
    2. ":)" => "fu",
    3. ";)" => "fu2",
    4. ":(" => "fu3",
    5. ":roll:" => "fu4"
    6. ), 4));


    Quellcode

    1. string(38) "Hallofu fu2 fu3 fu3 :) :) :( :) :roll: testende"


    dies:

    Quellcode

    1. string(38) "Hallofu fu2 fu3 fu3 testende"


    ausgeben.

    greets
  • Quellcode

    1. function smileys($inputString, $smileys, $limit){
    2. $returnString = "";
    3. $counter = 0;
    4. for($a = 1; $a<=strlen($inputString); $a++){
    5. $s = substr($inputString, 0, $a);
    6. $returnString .= substr($inputString, $a-1, 1);
    7. foreach($smileys as $smiley => $replacement){
    8. if( strpos($returnString, $smiley) === false )
    9. continue;
    10. if( $counter >= $limit )
    11. $replacement = "";
    12. $counter++;
    13. $returnString = substr_replace($returnString, $replacement, strpos($returnString, $smiley));
    14. }
    15. }
    16. return $returnString
    17. ;
    18. }
    Alles anzeigen


    Sollte dann damit gehen, ist jetzt aber nicht getestet.
    Jan Thurau
    Software and Systems Engineer
    janthurau.de

    [Blockierte Grafik: http://www.pageheroes.com/media/image/pageheroes_logo.png] - We get your page working!