Auslassungszeichen ersetzen
Peter
- javascript
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
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
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
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.
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
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
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
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
$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 -->
$}
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
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!
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
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
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
echo $begrüßung;
Dieser 'Typ' nervt -> Dieser &sbqou;Typ’ 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";
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- („) und doppelte Abführungszeichen (”) sowie einfache An- und Abführungszeichen (‚ und ’) 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 „ / “ und ‚ [sic!] / ‘ verwendet. [Wikipedia: Anführungszeichen]
Gruß,
Gunnar
你好 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
„ / “ und ‚ [sic!] / ‘ 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 :)
再见,
克里斯蒂安
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
你好 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… ☺
再见,
克里斯蒂安
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
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
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