Peter: Auslassungszeichen ersetzen

Hallo Leute,

ich habe folgendes Problem:

Ein dynamisch zusammengesetztes Formular hat das Input-Feld "FORM.bildunterschrift". Wenn jemand dieses Feld ausfüllt, sollen alle darin vorkommenden Zollzeichen (") sowie Auslassungszeichen (') durch doppelte Anführungs- („) und doppelte Abführungszeichen (”) sowie einfache An- und Abführungszeichen (‚ und ’) ersetzt werden.
Das ganze soll mit onBlur="ErsetzeZeichen();" passieren. Einen Zugriff auf das Form-Tag habe ich leider nicht; es wird automatisch generiert.

Also, nochmal zur Verdeutlichung, folgendes soll passieren:

Mein Opa heißt "Franz" -> Mein Opa heißt „Franz&rdqou;

Dieser 'Typ' nervt -> Dieser &sbqou;Typ’ nervt

  1. Tag Peter.

    Ein dynamisch zusammengesetztes Formular hat das Input-Feld "FORM.bildunterschrift". Wenn jemand dieses Feld ausfüllt, sollen alle darin vorkommenden Zollzeichen (") sowie Auslassungszeichen (') durch doppelte Anführungs- („) und doppelte Abführungszeichen (”) sowie einfache An- und Abführungszeichen (‚ und ’) ersetzt werden.

    Dafür ist string.replace() gedacht.

    Das ganze soll mit onBlur="ErsetzeZeichen();" passieren. Einen Zugriff auf das Form-Tag habe ich leider nicht; es wird automatisch generiert.

    Dann greife auf das Element mittels der getElement(s)By...-Methoden zu und weise dem gewünschten Eventhandler wie einer Objekteigenschaft deine Funktion ErsetzeZeichen zu.

    Allerdings frage ich mich, warum du onBlur verwenden willst, ich würde die Ersetzung frühestens onSubmit oder noch besser erst durch die verarbeitende Software erledigen. Stell dir vor, jemand gibt eines der Sonderzeichen ein, verlässt das Eingabefeld und entdeckt dann einen Fehler, den er korrigieren will. Doch auf einmal stehen da so lustige Dinge wie „ drin, die er nie eingegeben hat. Das dürfte ihn einigermaßen verwirren.

    Siechfred

    --
    Früh übt sich ... (74kB)
    Der schwierigste Blick ist immer der über den Tellerrand -- man glaubt gar nicht, wie hoch so ein Tellerrand sein kann.
    1. Hi,

      Allerdings frage ich mich, warum du onBlur verwenden willst, ich würde die Ersetzung frühestens onSubmit oder noch besser erst durch die verarbeitende Software erledigen. Stell dir vor, jemand gibt eines der Sonderzeichen ein, verlässt das Eingabefeld und entdeckt dann einen Fehler, den er korrigieren will. Doch auf einmal stehen da so lustige Dinge wie „ drin, die er nie eingegeben hat. Das dürfte ihn einigermaßen verwirren.

      Nicht nur das.

      Die Ersetzung dürfte auch nicht immer sinnvoll sein.

      Gibt's das oder gibt's das nicht?
      würde zu
      Gibt‚s das oder gibt’s das nicht?
      Oder:
      Links ein 15" und rechts ein 17" Monitor
      Oder ...

      Siechfred

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      Schreinerei Waechter
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      1. Allerdings frage ich mich, warum du onBlur verwenden willst, ich würde die Ersetzung frühestens onSubmit oder noch besser erst durch die verarbeitende Software erledigen. Stell dir vor, jemand gibt eines der Sonderzeichen ein, verlässt das Eingabefeld und entdeckt dann einen Fehler, den er korrigieren will. Doch auf einmal stehen da so lustige Dinge wie „ drin, die er nie eingegeben hat. Das dürfte ihn einigermaßen verwirren.

        »»

        Tach Siechfred,
        das ist eines der Probleme. Ich kann weder in das <form>-Tag, noch in den Submit-Button was reinschreiben, denn diese Dinge werdem beim Zusammenbau des Formulars durch fremde Software automatisch generiert (Diese liegen in separaten Templates in geschützten Verzeichnissen). Ich habe lediglich Zugriff auf die Input-Tags.

        @Andreas: Du hast natürlich Recht, darüber hatte ich auch schon nachgedacht - jedoch würde ich solche Unzulänglichkeiten in Kauf nehmen.

        Hintergrund ist ein ganz banaler: Nach dem jetzigen System können Benutzer Zollzeichen und Auslassungszeichen verwenden und abschicken. Diese werden in einer DB gespeichert. Es handelt sich dabei um Bildunterschriften, im Zusammenhang mit einem Bild/Foto.

        Das Bild wird im Rahmen eines Artikels innerhalb eines CMS angezeigt, zusammen mit der Bildunterschrift, die seinerseits jedoch Bestandteil eines Funktionsaufrufes (für die Anzeige des Bildes in Originalgröße) ist. Und wenn da unkontrollierte " oder ' drin auftauchen, gibt es JavaScript-Salat.

        1. puts "Hallo " + gets.chomp + "."

          ?> Peter
          => Hallo Peter.

          Und wenn da unkontrollierte " oder ' drin auftauchen, gibt es JavaScript-Salat.

          Wenn sie escaped sind, nicht. ( " oder ')
          Hast du Zugriff auf das Zielscript des Formulars?

          Einen schönen Montag noch.

          Gruß, Ashura

          --
          Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
          30 Days to becoming an Opera8 Lover -- Day 20: search.ini
          Meine Browser: Opera 8.01 | Firefox 1.0.4 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
          [Deshalb frei! - Argumente pro freie Software]
          1. Wenn sie escaped sind, nicht. ( " oder ')
            Hast du Zugriff auf das Zielscript des Formulars?

            Leider nein. Ich komme nur auf das Template mit den <input>-Tags. Deswegen diese umständliche Aktion. Ich weiß selbst, dass das nicht schön ist, bietet mir im Moment jedoch die einzig sinnvolle Möglichkeit.

            Schönen Tag noch :)

            Peter

            1. puts "Hallo " + gets.chomp + "."

              ?> Peter
              => Hallo Peter.

              Leider nein. Ich komme nur auf das Template mit den <input>-Tags. Deswegen diese umständliche Aktion. Ich weiß selbst, dass das nicht schön ist, bietet mir im Moment jedoch die einzig sinnvolle Möglichkeit.

              Hm... Dann sehe (zumindest ich) keine zuverlässige Möglichkeit mehr, tut mir leid.

              Einen schönen Montag noch.

              Gruß, Ashura

              --
              Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
              30 Days to becoming an Opera8 Lover -- Day 20: search.ini
              Meine Browser: Opera 8.01 | Firefox 1.0.4 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
              [Deshalb frei! - Argumente pro freie Software]
            2. Tag Peter.

              Ich komme nur auf das Template mit den <input>-Tags. Deswegen diese umständliche Aktion.

              Könntest du uns mal so ein Template zeigen?

              Siechfred

              --
              Früh übt sich ... (74kB)
              Der schwierigste Blick ist immer der über den Tellerrand -- man glaubt gar nicht, wie hoch so ein Tellerrand sein kann.
              1. $object edit_autorimage {
                <!-- EDITOBJECTS: OBJECT EDIT_AUTORIMAGE BEGINN -->
                   <link rel="stylesheet" href="@intranet/css/default.css" type="text/css" />
                   <?PHP
                   echo '<script language="JavaScript" type="text/javascript" src="'.P_intranet.'jsc/jsc.js"></SCRIPT>';
                   ?>
                        <!--
                    $uploadpic $autor_bildorig
                    $convert $autor_bild.jpg from $autor_bildorig options "-geometry '200>x200>' -quality 100"
                    $convert $autor_bildgross.jpg from $autor_bildorig options "-geometry '640>x480>' -quality 100"
                        -->

                <div style="z-index:30;position:absolute;top:100px;left:550px;" class="main">Ausgewähltes Bild:<br /><img src="$autor_bild" width="100"></div>
                <div style="position:absolute; top:0px; left:0px; z-index:1;"><table cellpadding="0" cellspacing="0" height="26" width="100%" style="background-image:url('<?PHP echo P_intranet; ?>gfx/bar_top.gif');"><tr><td></td></tr></table></div>
                <div id="hilfe" style="z-index:50;position:absolute;top:1px;right:0px;">$use @hilfe/hilfe_objekte.obj $useobject hilfe1("REDAK_BILD_LOKAL")</div>
                <body style="background-color:#FEFFCD;">
                <br /><br /><br />
                <table class="" cellspacing="0" cellpadding="0" border="0" width="100%">
                   <tr>
                      <td class="">
                    <table cellpadding="0" cellspacing="0" border="0" width="100%" class="pa0000px">
                     <tr>
                      <td colspan="2" valign="top" class="main"><b>Bild von lokaler Festplatte einbinden</b><br /><br /></td>
                     </tr>
                     <tr>
                      <td width="40%" valign="top" class="main">Bildunterschrift:<br /><span class="little" style="text-align:left;">Beschriftung unterhalb des Bildes (optional)</span><br /><br /></td>
                      <td width="60%" valign="top"><input class="seitenueberschrift" type="text" name="$autor_bildunterschrift" value="$autor_bildunterschrift" style="width:400px" maxlength="300"><br /><br /></td>
                     </tr>
                     <tr>
                      <td valign="top" class="main">Bild:<br /><span class="little" style="text-align:left;">(erforderlich)</span><br /><br /></td>
                      <td valign="top"><input type="submit" class="submit" name="$autor_bildorig" value="Bild auswählen"><br /><br /></td>
                     </tr>
                     <tr>
                      <td valign="top" class="main">Darstellung:<br /><span class="little" style="text-align:left;">Der Bildkasten kann mit einer Lupe dargestellt werden, welche beim Anklicken das Bild vergrößert anzeigt (voreingestellt: nur wenn das Originalbild breiter oder höher als 200 Pixel ist).</span><br /><br /></td>
                      <td valign="top">
                       <select name="$autor_bildzoom" size="1" class="sp1" style="width:140px">
                                   <option value="1" >vergrößerbar</option>
                                   <option value="0">nicht vergrößerbar</option>
                             </select><br /><br /></td>
                     </tr>
                     <tr>
                      <td width="40%" valign="top" class="main"><br /><br /></td>
                      <td width="60%" valign="top" class="f10 cored"></td>
                     </tr>
                    </table></td>
                   </tr>
                </table>
                </body>
                <!-- EDITOBJECTS: OBJECT EDIT_AUTORIMAGE ENDE -->
                $}

                1. Tag Peter.

                  <?PHP
                    echo '<script language="JavaScript" type="text/javascript" src="'.P_intranet.'jsc/jsc.js"></SCRIPT>';
                  ?>

                  Steht dieser HTML-Code später innerhalb des head-Bereichs?

                  [div]
                  [div]
                  [div]
                  <body style="background-color:#FEFFCD;">

                  Huch, die DIVs haben aber nichts vor dem öffnenden body-Tag zu suchen.

                  <input class="seitenueberschrift" type="text" name="$autor_bildunterschrift" value="$autor_bildunterschrift" style="width:400px" maxlength="300">

                  Ups, wo ist denn dein öffnendes und schließendes form-Tag? Das HTML scheint mir nur so vor Fehlern zu strotzen, aber sei's drum. Welche serverseitige Technik (außer PHP) wird denn verwendet? Jedenfalls könntest du es so versuchen:

                  function ErsetzeZeichen() {  
                    var obj = document.getElementById("bildunterschrift");  
                    alert(obj.value); // Kontrolle  
                  }
                  

                  Da du ja Zugriff auf das Template hast, müsstest du diese Javascript-Funktion nur noch im HEAD-Bereich platzieren und sie dem Eventhandler onblur zuweisen. Für den Zugriff auf das input weist du ihm einfach die bereits oben im JS-Teil verwendete ID "bildunterschrift" zu:

                  <input id="bildunterschrift" class="seitenueberschrift" type="text" name="$autor_bildunterschrift" value="$autor_bildunterschrift" style="width:400px" maxlength="300" onblur="ErsetzeZeichen();">

                  So könnte es funktionieren.

                  Siechfred

                  --
                  Früh übt sich ... (74kB)
                  Der schwierigste Blick ist immer der über den Tellerrand -- man glaubt gar nicht, wie hoch so ein Tellerrand sein kann.
                  1. tach siechfred

                    Steht dieser HTML-Code später innerhalb des head-Bereichs?

                    ja

                    [div]
                    [div]
                    [div]
                    <body style="background-color:#FEFFCD;">
                    Huch, die DIVs haben aber nichts vor dem öffnenden body-Tag zu suchen.

                    ooops :)

                    <input class="seitenueberschrift" type="text" name="$autor_bildunterschrift" value="$autor_bildunterschrift" style="width:400px" maxlength="300">

                    Ups, wo ist denn dein öffnendes und schließendes form-Tag? Das HTML scheint mir nur so vor Fehlern zu strotzen, aber sei's drum. Welche serverseitige Technik (außer PHP) wird denn verwendet? Jedenfalls könntest du es so versuchen:

                    tja, das ist es ja, was ich immer sage :) die form-tags kommen aus einem mir nicht zugänglichen template. sonst hättet ich den ganzen mist ganz bequem per <form onSubmit="return sonstwas();"> abfangen können...

                    So könnte es funktionieren.

                    Siechfred

                    ich probiers mal aus :) danke zunächjst mal!

                    1. Tag Peter.

                      die form-tags kommen aus einem mir nicht zugänglichen template. sonst hättet ich den ganzen mist ganz bequem per <form onSubmit="return sonstwas();"> abfangen können...

                      Gibt es in der Endfassung nur ein einziges Formular? Dann kannst du auf dieses mit Hilfe von getElementsByTagName("form") zugreifen:

                      function add_Handler() {  
                        // Referenz auf das erste Formularelement im Dokument holen  
                        var fObj = document.getElementsByTagName('form')[0];  
                        // Eventhandler zuweisen  
                        fObj.onsubmit = ErsetzeZeichen;  
                      }
                      

                      Diese Funktion rufst du dann onload auf:

                      <body onload="add_Handler();">

                      Das sollte eigentlich funktionieren.

                      Siechfred

                      --
                      Früh übt sich ... (74kB)
                      Der schwierigste Blick ist immer der über den Tellerrand -- man glaubt gar nicht, wie hoch so ein Tellerrand sein kann.
        2. Tag Peter.

          das ist eines der Probleme. Ich kann weder in das <form>-Tag, noch in den Submit-Button was reinschreiben, denn diese Dinge werdem beim Zusammenbau des Formulars durch fremde Software automatisch generiert (Diese liegen in separaten Templates in geschützten Verzeichnissen). Ich habe lediglich Zugriff auf die Input-Tags.

          Du darfst also in das Template was reinschreiben? Dann sollte es doch überhaupt kein Problem sein, im Kopfbereich eine JS-Funktion einzubauen, welche dir eine Referenz auf das gewünschte Formularelement holt und dann dem Eventhandler die Funktion zuweist:

          function add_Handler() {  
            // Referenz auf das Eingabefeld holen  
            var obj = document.getElementById("Formularelement");  
            // dem Eventhandler onBlur eine Referenz auf die Funktion zuweisen  
            // Achtung: immer ohne Klammern hinter dem Funktionsnamen!  
            obj.onblur = deineFunktion;  
          }  
            
          function deineFunktion() {  
            alert("Klappt.");  
          }
          

          Die Funktion add_Handler() rufst du onLoad auf.

          Das Bild wird im Rahmen eines Artikels innerhalb eines CMS angezeigt, zusammen mit der Bildunterschrift, die seinerseits jedoch Bestandteil eines Funktionsaufrufes (für die Anzeige des Bildes in Originalgröße) ist. Und wenn da unkontrollierte " oder ' drin auftauchen, gibt es JavaScript-Salat.

          Dann maskiere diese Zeichen mit "", dann gibt's eigentlich keine Probleme mehr und die eingegebenen Zeichen verlieren nicht die Bedeutung, welche der User bei Eingabe gewollt hat.

          Siechfred

          --
          Früh übt sich ... (74kB)
          Der schwierigste Blick ist immer der über den Tellerrand -- man glaubt gar nicht, wie hoch so ein Tellerrand sein kann.
      2. Hi,

        Gibt's das oder gibt's das nicht?

        Ließe sich mittels RegExp herausfiltern, denn das könnte man unterscheiden von

        Gibt 's das oder gibt' s das nicht? ;-)

        Analog ist das

        Links ein 15" und rechts ein 17" Monitor

        nicht

        Links ein 15 "und rechts ein 17" Monitor (wobei da ohnehin 2 Bindungsstriche fehlen ;-)).

        Aber ebenfalls zu berücksichtigen wäre z.B.

        Er sagte: "Gibt's von Ch. Schnauß' tolle 'Rüttel-Reime'?" ;-))

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  2. echo $begrüßung;

    Dieser 'Typ' nervt -> Dieser &sbqou;Typ&rsquo; nervt

    Wie würdest du Deppen- und ordentliche Apostrophe behandeln? Und was soll passieren, wenn zwei davon im Text vorkommen?

    Gan'z einfach stell ich's mir nicht vor. :-)

    echo "$verabschiedung $name";

  3. Hi Peter,

    Zollzeichen (")

    " U+0022 ist nicht das Zollzeichen, sondern die eierlegende Wollmilchsau für alles und nichts. Das Zollzeichen ist ″ U+2033.

    Auslassungszeichen (')

    Für ' U+0027 gilt Entsprechendes.

    durch doppelte Anführungs- (&bdquo;) und doppelte Abführungszeichen (&rdquo;) sowie einfache An- und Abführungszeichen (&sbquo; und &rsquo;) ersetzt werden.

    Die Namen right double (single) quotation mark beziehen sich auf die Verwendung im Englischen.

    Im Deutschen steht rechts das left double (single) quotation mark.

    Es werden die Paare „ U+201E / “ U+201C und ‚ U+201A / ‘ U+2018, also &bdquo; / &ldquo; und &sbquo; [sic!] / &lsquo; verwendet. [Wikipedia: Anführungszeichen]

    Gruß,
    Gunnar

    --
    „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
    1. 你好 Gunnar,

      Im Deutschen steht rechts das left double (single) quotation mark.

      Es werden die Paare „ U+201E / “ U+201C und ‚ U+201A / ‘ U+2018, also
      &bdquo; / &ldquo; und &sbquo; [sic!] / &lsquo; verwendet.
      [Wikipedia: Anführungszeichen]

      Das schönste ist: unter X11 kann man da sehr einfach ein „eigenes“
      Tastatur-Layout basteln, dass diese Zeichen enthält :) Ich habe jetzt „ auf
      Altgr+v, “ auf Altgr+b, ‚ auf Shift+Altgr+v, ‘ auf Shift+Altgr+b gelegt. Sehr
      cool :)

      再见,
      克里斯蒂安

      --
      Death is God's way of telling you not to be such a wise guy.
      http://wwwtech.de/
      1. Hi Christian,

        Das schönste ist: unter X11 kann man da sehr einfach ein „eigenes“
        Tastatur-Layout basteln, dass diese Zeichen enthält :) Ich habe jetzt „ auf
        Altgr+v, “ auf Altgr+b, ‚ auf Shift+Altgr+v, ‘ auf Shift+Altgr+b gelegt. Sehr
        cool :)

        Jepp, ziemlich. „Danke“ nochmal!  :-)

        Viele Grüße
        Benjamin

        1. 你好 Benjamin,

          Jepp, ziemlich. „Danke“ nochmal!  :-)

          Nich dafür – ich habe de_CK jetzt nochmal ein wenig angepasst ☺ Es ist unter
          http://wwwtech.de/de_CK einsehbar… ☺

          再见,
          克里斯蒂安

          --
          <g[oma]> peter lustig ist auf jeden fall besser als peter huth, obwohl der auch lustig ist.
          http://wwwtech.de/
      2. Hallo.

        Das schönste ist: unter X11 kann man da sehr einfach ein „eigenes“
        Tastatur-Layout basteln, dass diese Zeichen enthält :) Ich habe jetzt „ auf
        Altgr+v, “ auf Altgr+b, ‚ auf Shift+Altgr+v, ‘ auf Shift+Altgr+b gelegt. Sehr
        cool :)

        Leg sie dir vielleicht besser auf Alt+^ und Alt+2; dann musst du dich am Mac nicht umgewöhnen. Dort finde ich es übrigens sehr praktisch, dass man diese Sonderzeichen möglichst logisch zugeordnet hat: » und « auf dem q, ± auf dem +, £ auf der gleichen Taste wie das $-Zeichen, … als Kombination mit . und eben auch “ auf der gleichen Taste wie " und „ natürlich links davon, jedoch nicht auf der 1, weil die ja für !, ¡ und ¬ zuständig ist.
        MfG, at

        1. Hallo at,

          Leg sie dir vielleicht besser auf Alt+^ und Alt+2; dann musst du dich am Mac nicht umgewöhnen.

          Ich hab ihm dummerweise schon erzählt, dass man sich dort auch eigene Tastaturlayouts basteln kann.

          Dort finde ich es übrigens sehr praktisch, dass man diese Sonderzeichen möglichst logisch zugeordnet hat

          Ich eigentlich auch, manchmal stört es mich aber doch. Die | auf Alt-7 und den \ auf Alt-Shift-7 zu legen ist zwar logisch - allerdings grenzt es an einer Behinderung, wenn man was in der Shell oder in TeX machen will. Mein Workaround war bisher temporär auf die englische Tastaturbelegung zu wechseln, allerdings überlege ich derzeit tatsächlich mir ein Tim'sches Layout zu basteln. Logisch liegende Zeichen wie œ, æ oder das gar nicht so logisch liegende ∞ brauche ich dann doch weniger.

          Tim

          1. Hallo.

            Ich hab ihm dummerweise schon erzählt, dass man sich dort auch eigene Tastaturlayouts basteln kann.

            Er hat ja noch andere gute Hobbies, so dass er es vermutlich nicht übertreiben wird.

            Die | auf Alt-7 und den \ auf Alt-Shift-7 zu legen ist zwar logisch - allerdings grenzt es an einer Behinderung, wenn man was in der Shell oder in TeX machen will.

            Das stimmt.

            Mein Workaround war bisher temporär auf die englische Tastaturbelegung zu wechseln, allerdings überlege ich derzeit tatsächlich mir ein Tim'sches Layout zu basteln.

            Letzteres ist sicher vorzuziehen. Dank der mit Mac OS X eingeführten Nutzerverwaltung stört die neue Belegung ja niemanden mehr.

            Logisch liegende Zeichen wie œ, æ oder das gar nicht so logisch liegende ∞ brauche ich dann doch weniger.

            Echt? Zumindest ∞ benötige ich förmlich ∞ oft.
            MfG, at