[HTML / Javascript]  's kopieren naar textarea

Pagina: 1
Acties:

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Op mijn website heeft de gebruiker de keuze tussen twee editors: een hardcode textarea en een WYSIWYG editor. Niet alleen de html, maar ook de opmaak (indent, etc) wordt opgeslagen, zodat de ingetikte html er bij oproep net zo uitzag als hij origineel was ingetikt (net zoals bij de GoT editor waarin ik dit bericht tik). Omdat de javascript code van de textarea editor (er zitten wat knoppen bij zoals bij GoT) in een aparte .js staat, moet ik de inhoud via een variabele oproepen:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
// Staat in texteditor.js
<script>
function writeEditor(content) {
  var string = '<textarea cols="60" rows="10">' + content + '</textarea>';
  document.write(string);
}
</script>

// Staat op de pagina zelf
<script>
var html = "Lees meer over <a href=\"bedijf\/uitleg\">ons bedrijf<\/a> &nbsp;";
writeEditor(html)
</script>

De textarea die deze code voortbrengt, ziet er in de browser als volgt uit:
code:
1
2
3
4
5
6
7
8
+----------------------------------------------------------+
| Lees meer over <a href="bedijf/uitleg">ons bedrijf</a>   |
|                                                          |
|                                                          |
|                                                          |
|                                                          |
|                                                          |
+----------------------------------------------------------+

Met andere woordt - de  's worden vervangen door spaties. En dat wil ik niet. Hoe kan ik ervoor zorgen dat de textarea de nbsp;'s gewoon overneemt. zoals hieronder?
code:
1
2
3
4
5
6
7
8
+----------------------------------------------------------+
| Lees meer over <a href="bedijf/uitleg">ons bedrijf</a>   |
| &nbsp;                                                   |
|                                                          |
|                                                          |
|                                                          |
|                                                          |
+----------------------------------------------------------+

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • chem
  • Registratie: Oktober 2000
  • Laatst online: 22-02 21:57

chem

Reist de wereld rond

een bsp is een no-breaking space die onder MacOS met alt-spatie en onder windows met alt+255 ingetiept kan worden. Hij ziet eruit als een vrijwel identieke spatie (soms ietsje breder).

Op het moment dat je submit krijg je dus weer die nbsp binnen als karakter.

Klaar voor een nieuwe uitdaging.


  • Peter
  • Registratie: Januari 2005
  • Laatst online: 21-02 20:23
door ipv. &nbsp; , &amp;nbsp; te gebruiken! :)

Verwijderd

.Peter schreef op zondag 12 maart 2006 @ 16:28:
door ipv. &nbsp; , &amp;nbsp; te gebruiken! :)
Tsja, sowieso hoor je alles wat tussen <textarea> en </textarea> staat op die manier te escapen. In PHP bijvoorbeeld met de functie htmlentities.

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Verwijderd schreef op zondag 12 maart 2006 @ 16:30:
[...]
Tsja, sowieso hoor je alles wat tussen <textarea> en </textarea> staat op die manier te escapen. In PHP bijvoorbeeld met de functie htmlentities.
Dat weet ik. Maar zoals gezegd wil ik de gebruiker van mijn website laten kiezen tussen een WYSIWYG en een textarea editor. De WYSIWYG editor (3rd party) vraagt om een html string als input (want: iframe), zoals in de TS. Ik wilde proberen de textarea op diezelfde string te laten werken, maar blijkbaar lukt dit niet :'(

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

(jarig!)
JavaScript:
1
2
3
4
5
6
7
8
9
function htmlspecialchars(string)
{
    string = string.replace(/&/g, '&');
    string = string.replace(/</g, '<');
    string = string.replace(/>/g, '>');
    string = string.replace(/"/g, '"');
    
    return string;
}

;)

[ Voor 4% gewijzigd door crisp op 12-03-2006 17:02 ]

Intentionally left blank


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
@crisp, dank je! Op deze manier kan ik idd htmlspecialchars gewoon client-side oplossen. Ik heb echter nog 1 probleem: als er in de string een ascii-code staat, wordt het "&" deel met jouw functieook omgezet:
code:
1
{ wordt &amp;#123;

Is het mogelijk om een array met ascii-codes te definieren, bij welke het omzetten van & in &amp genegeerd wordt?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 04-01 15:49

JHS

Splitting the thaum.

Je kan dan denk ik beter met een regex kunnen controleren of het niet een &, gevolgd door een #, [cijfers|letters] en een ; is :) .

DM!


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

(jarig!)
JavaScript:
1
string = string.replace(/&(?!(#\d{2,6}|#x[0-9a-f]{2,6}|[a-z]{2,8});)/gi, '&');

note overigens dat oudere versies IE geen lookahead-assertions ondersteunen...

Maar persoonlijk denk ik dat je hiermee je doel voorbij schiet; ik dacht dat het juist de bedoeling was dat &nbsp; ook als &nbsp; in je textarea zichtbaar moest zijn? Lijkt me dat dat dan ook voor &#123; zou moeten gelden?

Intentionally left blank


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
crisp schreef op zondag 12 maart 2006 @ 21:49:
Maar persoonlijk denk ik dat je hiermee je doel voorbij schiet; ik dacht dat het juist de bedoeling was dat &nbsp; ook als &nbsp; in je textarea zichtbaar moest zijn? Lijkt me dat dat dan ook voor &#123; zou moeten gelden?
Ik had daar ook duidelijker in kunnen zijn. Binnen mijn website worden {tokens} tussen accolades vervangen door een bepaald tekst gerenderde html (zoals een {menu} of een {last_modified} datum). Als het artikel in een tekstarea opgeroepen wordt, moeten deze niet gerendered worden. Daarom zet ik de server-side om naar &#123; en &#125;. Aan de client-side moeten ze in de tekstarea wel als {accolades} worden weergegeven. Ik heb het nu als volgt opgelost:
JavaScript:
1
2
3
4
5
6
7
8
9
10
function htmlspecialchars(string) {
    string = string.replace(/{/, '{');
    string = string.replace(/}/, '}');
    string = string.replace(/&/g, '&amp;');
    string = string.replace(/</g, '&lt;');
    string = string.replace(/>/g, '&gt;');
    string = string.replace(/"/g, '&quot;');

    return string;
}

Nu werkt het zoals ik wil :) Nogmaals dank!

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."

Pagina: 1