You are not logged in.

wcf.regNote.message

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

1

Saturday, May 23rd 2009, 3:39pm

Kennt jemand einen einfachen Weg einen Text bestehend aus den wildesten Zeichen in dezimale Ascii Codes zu wandeln?

Damit ich nicht immer wieder das Problem habe, dass innerhalb einer Nachricht welche ich durch bestimmte Steuerzeichen verändere plötzlich irgendwas an der falschen Stelle passiert möchte ich einzelne Textblöcke so umwandeln, dass anstatt dem tatsächlichen Zeichen der dezimale Ascii Code dort steht. Das heißt anstatt einem A steht dort & # 65 ; usw. Meine Überlegung war es ein Array mit allen 256 möglichen Zeichen und dazu ein Array mit den entsprechenden Zahlencodes und dann eben mit str_replace einfach den Text wandeln lassen. Nur müsste ich dazu denke ich mal verschiedene Zeichen escapen damit sie nicht irgendwas auslösen was nicht passieren soll. Hier mal die beiden Array damit klarer wird was ich meine.

EDIT: Die beiden Arrays hier zu posten geht gar nicht. Erstens scrolle man sich nen Wolf und zweitens wandelt das forum die Zeichen schon um. aber ich denke jeder kann sich denken was ich meine.

Natürlich hier im Forum bisl doof das die Zeilen so ellen lang sind aber das soll mal egal sein.

Gibts in PHP da nicht ein fertiges Kommando für? Vor allem eines was auch wirklich die korrekte Ausgabe erzeugt?
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

Rumpel78

Beginner

Posts: 27

  • Send private message

2

Sunday, May 24th 2009, 3:00pm

Es gibt die Funktion ord(), die den ASCII Code eines Zeichens zurückliefert -> http://at2.php.net/ord

Möchtest du alle Zeichen umwandlen oder nur deine Steuerzeichen?

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

3

Sunday, May 24th 2009, 9:52pm

Ich möchte restlos alle Zeichen umwandeln, da ein Ascii Bild ja aus den wildesten Zeichen bestehen kann. Und damit ich mir nicht ständig Gedanken machen muss wie ich erst z.B. Smilies erkennen lasse und dann aus dem Ascii Bild wieder raus hole und so hin und her möcht ich einfach das Ascii Bild ansich in Codes umwandeln damit die anderen Parser da nichts mehr falsch machen können.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

Rumpel78

Beginner

Posts: 27

  • Send private message

4

Monday, May 25th 2009, 9:56am

Vielleicht kann dir da base64_encode und base64_decode weiterhelfen - das wandelt einen String so um, dass nur darstellbare ASCII-Zeichen benutzt werden. Allerdings wächst der String dann auch an, und ich weiss nicht ob dabei nicht auch "Smiley-Kombination" herauskommen können.

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

5

Monday, May 25th 2009, 10:40am

Ich glaub ich muss etwas genauer erklären wie das momentan ist. Mit den Smilies das soll ja eben genau dadurch kein Problem mehr sein.

Also ich habe ein Gästebuch mit den Möglichkeiten fett, kursiv und unterstrichen zu schreiben. Außerdem kann mit über img Bilder einbinden und über url Links. Dann gibts eben noch die Option Ascii mittels welcher Ascii Bilder ins Gästebuch gesetzt werden können. Und halt eben noch die 20 Smilies oder wie viele das sind. Mein Parser geht nun hin, wandelt zuerst mal die drei Schriftformatierungen sowie img und url um da diese äußerst unwahrscheinlich in Ascii bildern vorkommen. Danach wird dann die Ascii Geschichte erkannt anhand [ascii] und [/ascii] und mittels preg_split auseinander gelegt. Das heißt ich habe die Variablen $preascii, $ascii und $postascii wo eben der Gästebucheintrag vor und nach dem Ascii Bild sind und das Ascii Bild selbst. Vor dem Ascii Bild kann nichts mehr von Ascii kommen und die Variable jage ich gleich durch den "Smilie Parser" und gut. Nur nach dem Ascii Bild könnte ja etwas Text mit Smilies und sowas folgen und dann noch ein zweites Ascii Bild. Deshalb muss ich die Variable erst mal in Ruhe lassen. Wenn ich nun aber jedes Ascii Bild in Codes umwandle so das im Quellcode dann jede menge &#xx;&#xx;&#xx;... stehen dann könnte ich zuerst die Ascii Erkennung laufen lassen, dann ohne Bedenken die Textformatierung und img sowie url Tags und dann die Smilie Geschichte weil ich genau weiß diese Zeichen sind beim Ascii Bild so oder so codiert und können nicht mehr falsch erkannt werden. Das heißt jedoch auch entweder ich wandle die Zeichen von dem Ascii Bild so um das jeder Browser diese trotzdem bei der Ausgabe richtig darstellt (sprich mit &#xx; für jedes Zeichen) oder aber ich muss erst das Ascii Bild umwandeln, dann alle weiteren Parser laufen lassen und am Ende dann erneut alles umwandeln. Wobei ich dann bei der Rückwandlung wieder das Problem hab, dass ich ein Kriterium brauche alles richtig zu erkennen weil ja jeder einzelne Parser den Text nicht in Teilen weiter reicht sondern als ein Teil.

Hier noch mal ein Praxisbeispiel zur Veranschaulichung.
Benutzer schreibt folgendes ins Gästebuch.

Quoted

Hallo Max,
hast Du auf dem Foto [ b ]den[ / b ] Typ gesehen?
[ img ]http : // www . urlzumbild . de / irgendwas . jpg[ / img ]
Hab nen cooles Ascii Bild für dich
[ ascii ].,;.,;)::,,..'#'"##4{[]}...[ / ascii ]
is [ u ]das[ / u ] nicht schön?


Die Parser wandeln momentan die Nachricht so um das das so aussieht.

Quoted

Hallo Max,
hast Du auf dem Foto < b >den< / b > Typ gesehen?
< img src = http : // www . urlzumbild . de / irgendwas . jpg >
Hab nen cooles Ascii Bild für dich
< span class = asciifont >.,;.,;)::,,..'#'"##4{[]}...< / span >
is < u >das< / u>] nicht schön?


Tja und wie man hier im Forum auch schon schön sehen kann is in der Ascii Nachricht ein Smilie versteckt und das nervt mich weil ich das verhindern muss. Im Moment gehe ich hin und jage erst mal alles durch den Smilie Parser und am Schluss lasse ich den Ascii Parser laufen und lasse aus der Ascii Nachricht dann eben alles wieder zurück umwalden. Ist aber meiner Meinung nach ganz schön doof erst alles so umzuwandeln und dann wieder zurück. Vor allem muss ich deshalb ständig darüber nachdenken kann ich das und das jetzt so machen oder gibts dann wieder Probleme. Und jeder neue Smilie den ich einsetze muss ich auch in allen anderen Ecken berücksichtigen sonst wird das mit der Rückverwandlung nichts.

EDIT: Vielleicht könnten wir das ja insgesamt sogar so machen, dass ich mal meine Funktionen und das hier poste und wir daraus mal eine allgemein gültige Klasse daraus machen. Vielleicht könnte das andere auch mal interessieren.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

Similar threads

wcf.user.socialbookmarks.titel