Moodle

Fix tidy filter behaviour

Details

  • Type: Bug Bug
  • Status: Closed Closed
  • Priority: Major Major
  • Resolution: Fixed
  • Affects Version/s: 1.6.5, 1.7.2, 1.8
  • Fix Version/s: 1.6.6, 1.7.3, 1.8.1
  • Component/s: Filters
  • Labels:
    None
  • Environment:
    PHP5, tidy filter running
  • Database:
    Any
  • Affected Branches:
    MOODLE_16_STABLE, MOODLE_17_STABLE, MOODLE_18_STABLE
  • Fixed Branches:
    MOODLE_16_STABLE, MOODLE_17_STABLE, MOODLE_18_STABLE

Description

After getting crazy last days with one Spanish moodler about how his site was showing accents and other chars (only in some places, apparently in a random fashion) I discovered that it had the tidy filter enabled and running.

So, one simple string like this:

'áéíóú'

after being processed by format_text() is showed in browser like:

áéíóúñÑ
(enclosed by html <p> tags in source code)

It seems that tidy breaks things sometimes...

To reproduce:

1) Enable tidy filter (ensure you've installed the PHP5 tidy extension (tidy_repair_string).
2) Copy the attached test.php to your moodle dirrot.
3) Invoke it from the browser.

Activity

Hide
Eloy Lafuente (stronk7) added a comment -

...confirmed in Spanish forums:

it seems that, by default the tidy_repair_string() function works with ascii (or iso-8859-1). But it has one third parameter that allows to specify the desired encoding.

Just change the function call from:

$text = tidy_repair_string($text, $tidyoptions);

to

$text = tidy_repair_string($text, $tidyoptions,'utf8');

And everything should work perfectly.

Note that, under 1.6 & 1.7 we need to ask for $CFG->unicodedb before setting than parameter, while under 1.8 and HEAD we can apply it directly.

Ciao

Show
Eloy Lafuente (stronk7) added a comment - ...confirmed in Spanish forums: it seems that, by default the tidy_repair_string() function works with ascii (or iso-8859-1). But it has one third parameter that allows to specify the desired encoding. Just change the function call from: $text = tidy_repair_string($text, $tidyoptions); to $text = tidy_repair_string($text, $tidyoptions,'utf8'); And everything should work perfectly. Note that, under 1.6 & 1.7 we need to ask for $CFG->unicodedb before setting than parameter, while under 1.8 and HEAD we can apply it directly. Ciao
Hide
Nicolas Connault added a comment -

All done!

Show
Nicolas Connault added a comment - All done!

People

Vote (0)
Watch (1)

Dates

  • Created:
    Updated:
    Resolved: