Javascript replace.

Antarctica

Grand Admiral Special
Mitglied seit
11.09.2004
Beiträge
2.444
Renomée
34
Standort
Kupferstadt Stolberg
Hallo,

ich versuche gerade String-Ersetzen in javascript.

Ich sende eine Kommaseparierte Liste von Tags vom Server zum Client. Tags können jedoch Kommata enthalten. Daher werden sie quasi escaped.

Der PHP-Teil zum Escapen ist

if(isset($_GET['tag'])) $_GET['tag']=str_replace(array(";",","),array(";1",";2"),mysql_real_escape_string($_GET['tag']));

Der Tag wird dann codiert in der Datenbank abgelegt, wann anders dann abgerufen und an die Seite gesendet. Dort soll Javascript dann mittels

Text = Text.replace(/;1/g, ",").replace(/;2/g, ";");

den Tag decodieren. Leider funktioniert letzteres nicht so wie es soll. Ich hab auch keine Ahnung wie es richtig geht...
 
Also am JavaScript kann es schonmal nicht liegen, die Ersetzungen funktionieren. Beispiel:
Code:
'Tag 1;1Tag 2;2Tag 3;1Tag 4;2Tag 5'.replace(/;1/g, ",").replace(/;2/g, ";");
Ergebnis:
Code:
Tag 1,Tag 2;Tag 3,Tag 4;Tag 5
Was genau steht denn in deiner Variable "Text"? Und warum machst du die Ersetzungen nicht schon auf PHP-Seite, wenn du die Tags aus der Datenbank holst?

Warum speicherst du die Tags eigentlich nicht normalisiert in einer eigenen Tabelle? :)

Gruß,
Max
 
Was genau steht denn in deiner Variable "Text"?
Das PHP-Script gibt meinetwegen

"Alexander,Test2,Neuer Tag"

aus. Das steht dann in request.responseText. Dann kommt

Code:
var TextList = request.responseText.split(",");
for(var i=0;i<TextList.length;i++) {
 addRow(id,TextList[i]);
}
und in addRow steht
Code:
function addRow(id,Text) {
  Text =  Text.replace(/;1/g, ",").replace(/;2/g, ";");
  [...] // HTML-Elemente erzeugen
  var text = document.createTextNode(Text);
  [...] // HTML-Elemente konkatenieren etc.
  tbody[id].appendChild(tr);
}
(Die Variable ID sorgt nur dafür, dass ich die richtige Tabelle erwische)

Was in "Text" semantisch drin steht, hängt davon ab, was der Nutzer tut. Beim ersten Aufruf jeder Seite werden die Tags der Seite als kommaseparierte Liste geschickt, beim Anklicken eines Tags die Seiten zu dem Tag.

Und warum machst du die Ersetzungen nicht schon auf PHP-Seite, wenn du die Tags aus der Datenbank holst?
Weil die Übertragung zwischen Server und Client als kommaseparierte Liste erfolgt. Daher dürfen die einzelnen Werte beim Übertragen keine Kommata enthalten - in der Datenbank wär's eigentlich egal :).

Warum speicherst du die Tags eigentlich nicht normalisiert in einer eigenen Tabelle? :)
Falls du damit meinst, warum ich nicht drei Tabellen statt einer verwende: KISS (Keep it small and simple).
Ich würde mit meiner bescheidenen Meinung behaupten, dass das Ding rein nach der Theorie sogar in 3-Normalform ist, da ich genau folgendes in der Datenbank ablege:

TABLE Socialtags (Tag VARCHAR 128, Page VARCHAR 128, added DATE)

Da gibt es keine Redundanz; die Tabelle hat schließlich nur einen einzigen möglichen Schlüssel: (Tag, Page), und das Datum hängt vom ganzen Schlüssel ab (wann wurde der Tag auf der Seite hinzugefügt).
.
EDIT :
.

HAHA, Fehler gefunden. LOL Über so viel Dämlichkeit meinerseits kann ich echt nur lachen.

Der "Fehler" heißt Browsercache... :]
 
HAHA, Fehler gefunden. LOL Über so viel Dämlichkeit meinerseits kann ich echt nur lachen.

Der "Fehler" heißt Browsercache... :]
Kenn ich woher :)
Weil die Übertragung zwischen Server und Client als kommaseparierte Liste erfolgt. Daher dürfen die einzelnen Werte beim Übertragen keine Kommata enthalten - in der Datenbank wär's eigentlich egal :).
Schau dir mal JSON an, damit könntest du die Tags einfach als JavaScript-Array übertragen. Dann hast du das Problem erst gar nicht mehr. *great*

Gruß,
Max
 
oder als behelf ein Trennzeichen benutzen das ur mit sehr wenig wahrscheinlichkeit in den textfeldern vorkommen wird, wie ein pipe z.B. |
JSON wäre natürlich sehr praktisch.
Übrigens kann ich als clientseitiges Helferlein jQuery empfehlen.
Manchmal ist das echt unbezahlbar.
 
Schau dir mal JSON an, damit könntest du die Tags einfach als JavaScript-Array übertragen. Dann hast du das Problem erst gar nicht mehr.
Ich mag solche Frameworks überhaupt nicht.

Wenn ich mit einem Gerät XML sprechen soll, konkateniere ich mir mein XML als String zusammen (ist viel einfacher als ein Objekt zu basteln) und mach ne Telnet-Verbindung auf...
 
Was hat JSON mit einem Framework zu tun?! Das ist sowas wie XML, nur besser lesbar und weniger Overhead ;)

Gruß,
Max
 
Dafür aber wesentlich anfälliger für Code-Einschleusungen. Du kannst via JSON ja auch Funktionen übertragen. Wer es sich leicht macht und das Objekt einfach via eval einbindet hat da schnell ein großes Problem...
 
Darum nutzt man auch kein eval, sondern bspw JSON.parse(). Für Implementierungsfehler kann das Format ja nichts. :)

Gruß,
Max
 
Ebend.
Und der Jux bei solchen Frameworks ist unter anderem dass man sich nicht um 1000 Eigenheiten gewisser Browser-Versionen kümmern muss.
Man kann in einer einzigen Zeile jQuery ein objekt selektieren, jeden kindknoten irgendwie manipulieren (css-klasse o.ä.) und mal eben den ganzen block ausblenden ohne sich mit getAttribute() und nullreference herumschlagen zu müssen, Inkonsistenzen im Event-Objekt sind kein Thema mehr und automatisches Binden von Event-handlern an per ajax neu hinzugefügte Elemente mittels .live() oder .delegate() ist absolut trivial.
Dabei ist es völlig unerheblich ob man es mit einem IE 7, 8 oder 9, einem Safari oder einem Firefox zu tun hat. Alle haben ihre Zicken und gerade IE9 ist in eingen Belangen wesentlich strenger als seine Vorgänger und auch zickiger als FF.
Man kann sichs natürlich immer schwer machen.
Aber bevor man dann XML benutzt, würde ich vorschlagen einfach Base64-Kodierte Rohdaten zu übertragen und in JS zu parsen. XML zusammenstückeln mag bei kleinen APIs noch gehen, wenn man aber gegen Webservices eine BizTalk-Server Programmieren muss und sich mit allen möglichen XML-Namespaces, Custom Types usw. rumschlagen, dann ist jede Form von Frameworke und erleichterung ein Segen! - Schon alleine der Übersichtlichkeit wegen. Ein Komplexer XML-Typ, zusammengesetzt aus 3 anderen komplexen XML-typen, welche ihrerseits wieder aus mindestens 2 XML-Typen bestehen... viel spaß bei den Verschachtelten Schleifen und If-Anweisungen um das alles sauber aneinander zu stückeln. *noahnung*
 
Zurück
Oben Unten