string länge in pixel

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • string länge in pixel

    Hi,

    ich habe ein Gästebuch
    Die geschriebenen Texte werden in einer Tabelle dargestellt.
    Die Tabelle hat eine breite von 400 pixeln.

    Damit die Tabelle aber nicht auseinandergezogen wird, suche ich mit der funktion wordwarp nach string die länger als 50 Zeichen sind. Dort setze ich dann ein " "(leerzeichen) ein.
    Damit umgehe ich das mir jemand die Formatierung zerreißen kann - indem er z.B. seinen Text ohnen Leerzeichen und Zeilenumbrüche schreibt.

    Diese Methode ist aber nicht unbedingt gut.
    Will man jetzt z.B. eine url einfügen, dann wird diese, wenn sie zu lang ist mit einem Leerzeichen unterbrochen.
    So kann sie nicht mehr dargestellt werden !

    Was ich jetzt eigentlich suche währe eine funktion, die schaut wie lang ein string (der über 50 Zeichen ist) in pixel währe.
    Man sollte natürlich die Schriftart und Größe berücksichtigen !

    Gibt es soetwas ?

    Oder wie macht Ihr es denn, damit euch nicht die Formatierung zerrissen wird.

    Danke
    Gruß
    Tago
    --------------------------------------
    Nachts is kälter als draußen !

  • #2
    Es gibt doch mit html&css eine Menge Möglichkeiten, damit das Fenster ne fixe Breite hat, der Text abgeschnitten wird, der Text verkleinert wird, wenn er keinen Platz mehr hat usw.
    Stichwörter max-width, overflow:hidden usw.
    Es gibt auch eine css-formatierung, die den Text automatisch verkleinert, wenn er keinen Platz hat, weiss leider nicht mehr wie das Stichwort heisst.

    http://selfhtml.teamone.de/

    mfg

    Kommentar


    • #3
      gute nachricht: gibt es!
      schlechte nachricht: das bsp. habe ich leider nur in c

      aber, du kannst das prinzip des c programms locker auf php umschreiben. das c proggi stellt ein kleines histogramm über die häfigkeit von zeichen, whitespaces und anderen dar.

      PHP-Code:
      #include <stdio.h>

      main(){
              
      int ijcncnwhitenothertemp;
              
      char cleanword[1000];
              
      int ndigit[10],nwhitedigit[3];

              
      nwhite nother nc 0;

          for(
      i=0;i<10;++i)
              
      ndigit[i] = 0;

          for(
      i=0;i<3;++i)
              
      nwhitedigit[i] = 0;

              while((
      getchar()) != 10){
                      
      cleanword[nc] = c;
              ++
      nc;
              }

              for(
      i=0;i<nc;i++){
                      if(
      cleanword[i] >= '0' || cleanword[i] <= '9'){
                  
      temp cleanword[i];
                              ++
      ndigit[temp-'0'];
              }

                      if(
      cleanword[i] == ' ' || cleanword[i] == '\t' || cleanword[i] == '\n'){
                  ++
      nwhite;
                  if(
      cleanword[i] == ' ')
                                      ++
      nwhitedigit[0];
                  else if(
      cleanword[i] == '\t')
                      ++
      nwhitedigit[1];
                  else if(
      cleanword[i] == '\n'){
                      ++
      nwhitedigit[2];
                  }

                      }else{
                              ++
      nother;
                      }
              }

          
      printf("\nzahlen\n______________\n");
          for(
      i=0;i<10;++i){
              if(
      ndigit[i] > 0){
              
      printf("%d: ",i);
              for(
      j=0;j<ndigit[i];++j)
                  
      printf("#");
              
      printf("\n");
              }
          }

              
      printf("\nleerzeichen\n______________\n");
              for(
      i=0;i<3;++i){
                      if(
      nwhitedigit[i] > 0){
                      
      printf("%d: ",i);
                  for(
      j=0;j<nwhitedigit[i];++j)
                                     
      printf("#");
                              
      printf("\n");
                      }
              }

              
      printf("\nandere\n______________\n");
              for(
      i=0;i<nother;++i){
                      if(
      nother 0){
                             
      printf("#");
                      }
              }
          
      printf("\n");
          

      Kommentar


      • #4
        vielleicht sollte ich noch hinzufügen, dass es dein eigentliches problem noch nicht löst. wenn du aber jedes einzelne zeichen hast, müsstest du auch mit php die pxelbreite und höhe (abhängig vom zeichensatz natürlich), herausfinden können. mit c gehts jedenfalls.

        Kommentar


        • #5
          ich glaub, am einfachsten ist, du verwendest die php funktion "count_chars ( string string [, int mode])" und rechnest das ergebnis X der breite eines standardzeichens des zielsystems (meinetwegen der voreingestellte im ie).

          wenn du aber styles verwendest und das ganze skalierbar sein soll, müsstest du zudem noch herausbekommen, wieviele pixel bei der oder der auflösung ein zeichen breit und hoch ist.

          beispiel für count_chars aus php.net
          PHP-Code:
          $data "Two Ts and one F.";

          $result = (count_chars($data0));

          for (
          $i=0$i < (sizeof($result)); $i++){
          if (
          $result[$i])
          // hier gehts dann zur sache
          echo "There were $result[$i] instances of \"" . (chr($i)) ."\" in the string.
          "
          ;
          }
          }

          ?> 
          dann gibts noch das hier, was vielleicht vielversorechender ist:

          http://www.php.net/manual/en/function.mb-strwidth.php

          Kommentar


          • #6
            Original geschrieben von CHnuschti
            [B]Es gibt doch mit html&css eine Menge Möglichkeiten, damit das Fenster ne fixe Breite hat, der Text abgeschnitten wird, der Text verkleinert wird, wenn er keinen Platz mehr hat usw.
            Stichwörter max-width, overflow:hidden usw.
            Es gibt auch eine css-formatierung, die den Text automatisch verkleinert, wenn er keinen Platz hat, weiss leider nicht mehr wie das Stichwort heisst.
            Geht nicht in IE. http://selfhtml.teamone.de/css/eigen....htm#max_width Kennst Du noch andere Möglichkeiten?

            @tago statt Leerzeichen kannst Du ein <wbr> einsetzen.
            http://selfhtml.teamone.de/html/text...h.htm#erlauben

            Wie das mit Links geht, interessiert mich auch.

            HIER_IM_FORUM_IST_DAS_GUT_GELOEST__HIER_IM_FORUM_IST_DAS_GUT_GELOEST__HIER_IM_FORUM_IST_DAS_GUT_GELO EST__HIER_IM_FORUM_IST_DAS_GUT_GELOEST__HIER_IM_FORUM_IST_DAS_GUT_GELOEST__HIER_IM_FORUM_IST_DAS_GUT _GELOEST__

            Also hier im Forum wird einfach nach einer festen Anzahl Zeichen ein <br /> eingefügt, bei Links aber nicht.

            und hier gabs auf die Frage auch schon keine Antwort: http://www.php-resource.de/forum/sho...threadid=10324
            Zuletzt geändert von MeinerEiner; 30.08.2002, 02:28.

            Kommentar


            • #7
              mach's doch in dem beispiel oben mit modulo!
              häng einfach alle n chars ein <br /> dran.

              Kommentar


              • #8
                Ich frag nochmal dumm: Was wenn ein URL, der sich im Text befindet mehr als n Zeichen hat? Dann steht mitten im URL ein <br /> und man kann den URL in die Tonne kloppen.

                Kommentar


                • #9
                  Original geschrieben von MeinerEiner
                  Also hier im Forum wird einfach nach einer festen Anzahl Zeichen ein <br /> eingefügt, bei Links aber nicht.
                  dafür werden hier links aber gekürzt (natürlich nur das, was angezeigt wird, die verlinkte url nicht -> siehe "..." in der mitte von links)

                  Kommentar


                  • #10
                    hier stand was zum vorherigen Beitrag, was ich mir im Nachhinein lieber verkneifen will, weil ich nicht gesehen habe, dass die Postings zeitgleich kamen.





                    Zuletzt geändert von MeinerEiner; 30.08.2002, 02:56.

                    Kommentar


                    • #11
                      warum?

                      Kommentar


                      • #12
                        siehe unten. Bsp. im IE laden. Ist doch fast perfekt, nicht?
                        mfg
                        Zuletzt geändert von CHnuschti; 30.08.2002, 04:02.

                        Kommentar


                        • #13
                          Hier das file, vllt. geht obige nicht wg. den Boardumbrüchen. mfg
                          Angehängte Dateien

                          Kommentar


                          • #14
                            html_fuer_css_newbies.php.txt
                            schau dir das mal in Mozilla oder NS6 an.

                            Und was hilfts mir, wenn der Text abgeschnitten wird? Er soll umgebrochen werden und Links nicht.

                            Kommentar


                            • #15
                              Hi,

                              Ich habe heute gesehen das NS7.0 auch in pixel ausgerichteten Tabellen den Text nicht bei Leerzeichen umbricht !
                              Das ist schon doof

                              Ich habe da noch ein admin tool, mit dem man eine Navigation verwalten kann.
                              Diese ist auf 15 Zeichen für jeden string begrenzt.
                              Schreibt man jetzt
                              Programmierung - dann passt es, aber bei
                              WWWWWWWWWWWWWWW - 15xW würde es nicht mehr passen.

                              Kann man nicht irgendwie den string zeichnen und sich die Breite zurückgeben lassen ?
                              Ist in den TTF Dateien die Breite in pixeln für die Buchstaben festgehalten ?

                              Tago
                              --------------------------------------
                              Nachts is kälter als draußen !

                              Kommentar

                              Lädt...
                              X