[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
TinyMCE - Hard time with double quotes - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
stockamster
Beiträge: 14
Registriert: 29. Aug 2009, 20:18

TinyMCE - Hard time with double quotes

31. Aug 2009, 16:23

Hallo

We use Redaxo with TinyMCE as addon. So articles are published and stored into a database. Since some time (new release?) we can't use double qoutes any more in the text we want to publish.

Because in some languages a double and a single quote is essential for the language this is a big problem. Also when we enter a link in the code it crashes Redaxo when displaying. We tried to get around this by playing with several configurations like cleanup, verify_html or entities.

But this doesn't change anything. It is funny that some text link a line break is convertet correctly like '&nbsp;' but something like <p> is still unchanged as well as " or '.

Also 'magic quotes' is no solution see http://ch2.php.net/magic_quotes. I looked to the configuration of php and magic_quotes is turned off anyway.

So what shall I do to get following done? Input in to the text area is.

----
Hi
The “magic_quotes” are tuned off, but I am are still not O’Relly.
----

When I store it to the database or look to it with the HTML window of tinyMCE I should get:

---
<p>Hi</p>
<p>&nbsp;</p>
<p>The "magic_quotes" are tuned off, but I am still not O&rsquo;Relly.</p>
---

When I look to it in the HTML window of tinyMCE only the ‘hard space’ is in it. The quotes are still not converted.

Please give me a hint. I am on my limit and the users drive me crazy.

Heinz

p.s. antworten kann man auch auf Deutsch

Benutzeravatar
Xong
Beiträge: 2081
Registriert: 5. Jun 2008, 08:30
Wohnort: Halle (Saale)

31. Aug 2009, 16:47

Hi stockamster!

Can you provide me (private message) or us a (limited) account for the Backend of your Redaxo?
It would help very much for tracing the error and finding a solution.

Permission for the TinyMCE-modul and for adding at least a slice with the modul would be nice.
LG,
Xong

[ externes Bild ] Määääääääääääääääääääääääh!

Benutzeravatar
Xong
Beiträge: 2081
Registriert: 5. Jun 2008, 08:30
Wohnort: Halle (Saale)

1. Sep 2009, 10:46

Got an account to the backend and solved the problem.

It was not an error of TinyMCE but a mistake in the module, which uses the editor.

If you have something like

Code: Alles auswählen

$article = "REX_HTML_VALUE[5]";
in the output of a module and you write a text with a double quote, then Redaxo simply replaces the REX_HTML_VALUE[5] with the text.

So the Text "Hello", he said. will produce following code:

Code: Alles auswählen

$article = ""Hello", he said.";
As you can imagine PHP will throw a syntax error, when parsing this line, because the double quote of the text closes the double quote marking the start of the string.

To avoid problems like this you should use the Heredoc-Syntax to get incoming texts into variables:

Code: Alles auswählen

$article = <<<EOT
REX_HTML_VALUE[5]
EOT;
I hope this is going to calm down your users and helps you to reach beyond your limits. =)
Zuletzt geändert von Xong am 1. Sep 2009, 14:07, insgesamt 3-mal geändert.
LG,
Xong

[ externes Bild ] Määääääääääääääääääääääääh!

zehbaeh
Beiträge: 556
Registriert: 17. Okt 2006, 11:52
Wohnort: Solingen

1. Sep 2009, 13:41

Hey Xong,

wenn Du dort noch einen Account hast, solltest Du vielleicht noch eine Action an das Modul hängen das die Dollar Zeichen in Entities umwandelt. Ansonsten könnten da leicht noch andere/schwerwiegendere Probleme entstehen.

stockamster
Beiträge: 14
Registriert: 29. Aug 2009, 20:18

1. Sep 2009, 16:39

Hallo Xong

Habe das so gemacht und im Output Modul

$article = "REX_HTML_VALUE[5]";

durch

$article = <<<EOT
REX_HTML_VALUE[5]
EOT;

ersetzt. Der Erfolg was, dass ich die Hälfte der Artikel nicht mehr editieren konnte?? Mache ich etwas falsch?

Danke

stockamster
Beiträge: 14
Registriert: 29. Aug 2009, 20:18

1. Sep 2009, 16:44

Upss..

Habe einen kleinen Fehler gemacht. Jetzt funkts.

Vielen Dank.

zehbaeh
Beiträge: 556
Registriert: 17. Okt 2006, 11:52
Wohnort: Solingen

2. Sep 2009, 14:35

Hallo stockamster,

neben den im ersten Post von mir angesprochenen Problemen mit den Dollarzeichen können mit der "heredoc" Syntax noch, wie angedeutet schwer wiegende Probleme auftreten (entspechendes Wissen um den Aufbau des Moduls bzw. ausreichend Mutwillen vorrausgesetzt):

Beispiel Eingabe (NICHT WIRKLICH EINGEBEN!):

Code: Alles auswählen

EOT;
$sql = new rex_sql();
if($sql->setQuery("UPDATE {$REX['TABLE_PREFIX']}user SET rights=CONCAT('#admin[]', rights)"))
{
   echo rex_warning('Ich mach mir ähh...uns die Welt grad so wie sie mir gefällt...');
}
<<<EOT
Würde ein Benutzer zb. diesen Text in ein Modul eingeben, wäre er bzw. alle Benutzer danach ein Administrator!

Beispiel Eingabe für Probleme mit Dollarzeichen:

Code: Alles auswählen

$REX[]

stockamster
Beiträge: 14
Registriert: 29. Aug 2009, 20:18

3. Sep 2009, 12:16

Hallo zehbaeh

Besten Dank für die Antwort. Bleibt für mich jetzt nur noch die Frage; wie kann ich das verhindern??

Gruss

zehbaeh
Beiträge: 556
Registriert: 17. Okt 2006, 11:52
Wohnort: Solingen

3. Sep 2009, 20:01

Die einzige mir bekannte Lösung mit den vorhandenen Mitteln ist den Inhalt mittels dem Modul zugewiesener Aktion zu manipulieren.
Aktion (preSave Add+Edit) für alle VALUES und Buchstaben als heredoc Begrenzer:

Code: Alles auswählen

<?php
/**
 * Ersetzt Dollarzeichen die eine Variablensubstitution ergeben könnten durch Entities
 * und deaktiviert mögliche "heredoc" Begrenzer durch einrücken um ein Leerzeichen.
 *
 * @author zehbaeh
 */
$replace = array
(
    '~\$([{a-zA-Z_]+)~'      => '&#36;\\1',
    '~^([a-zA-Z]+;\s*)$~im' => ' \\1'
);
foreach($REX_ACTION['VALUE'] as $index => $value)
{
    $REX_ACTION['VALUE'][$index] = preg_replace
    (
        array_keys($replace),
        array_values($replace),
        $value
    );
}
?>
Im Prinzip könnte man auch direkt alle Variablen in einer Schleife so behandeln.
Wobei das ersetzen bzw. einrücken des heredoc Begrenzers nur bei Verwendung eben dieser Syntax notwendig ist.
Das ersetzen des Dollarzeichens ist auch nur bei Verwendung von heredoc oder beim setzen der Variablenbezeichner in doppelten Anführungszeichen notwendig.

Edith-sprach-mit-Xong: Forums Dollarentity ist erledigt!

PS-2: Das ersetzen des Dollarzeichens könnte man noch in sofern optimieren das man prüft ob danach etwas steht das PHP als Variable interpretieren könnte. Sowas wie \$[a-zA-Z_]+

Edit-3: Code allgemeiner, alle VALUES, weitere mögliche heredoc Begrenzer durch Test auf Buchstaben statt fixem Bezeichner und Dollarumwandlung nur bei nachfolgenden möglichen Variablenbezeichnern.

Das ist alles wenig flexibel und recht umständlich.
Für diese und ähnliche Belange (mehr und benannte Variablen) habe ich im übrigen ein Addon erstellt das die rex_vars erweitert, sollte ich Lust und Zeit haben dazu eine verständliche Doku. zu schreiben, werde ich es ggf. veröffentlichen.
Das ist aber momentan nicht sehr wahrscheinlich...)
Zuletzt geändert von zehbaeh am 4. Sep 2009, 11:03, insgesamt 6-mal geändert.

Benutzeravatar
Xong
Beiträge: 2081
Registriert: 5. Jun 2008, 08:30
Wohnort: Halle (Saale)

3. Sep 2009, 20:46

zehbaeh hat geschrieben:PS: Achtung! in der Angabe des Dollarentity ist ein Leerzeichen drin (nach dem Und-Zeichen), da der Forums-Code ansonsten daraus ein "$" macht, das muss natürlich entfernt werden...doh
Versuch´s mal mit "&#36;": "&#36;"
LG,
Xong

[ externes Bild ] Määääääääääääääääääääääääh!

zehbaeh
Beiträge: 556
Registriert: 17. Okt 2006, 11:52
Wohnort: Solingen

3. Sep 2009, 20:57

Hey Xong,

Edith dankt.)

stockamster
Beiträge: 14
Registriert: 29. Aug 2009, 20:18

4. Sep 2009, 11:57

Super

Besten Dank, ich werde versuchten das zu implementieren. Aber wir habe keine so bösen Benutzer. :oops:

Herzliche Grüsse

Zurück zu „Allgemeines [R4]“