Drupal logo
Drupal logo

Na de upgrade van Drupal 6.17 naar 6.19, kreeg ik de volgende melding op een meertalige website installatie:

warning: htmlspecialchars() expects parameter 1 to be string, array given in includes/bootstrap.inc on line 857

Dit is bijna het zelfde probleem zoals beschreven in deze post.

Ook dit probleem was pas toen ik was ingelogd of een niet standaard taal had ingesteld.

Het probleem verschijnt dus alleen wanneer niet bent ingelogd en de taal is ingesteld op de niet-standaard taal.

Oplossen van het probleem

Open de file includes/bootstrap.inc en zoek naar de functie check_plain.

Een regel van de functie is veranderd. Hieronder is de nieuwe functie van check_plain.

De vetgedrukte stukken zijn door mij veranderd, de rest is origineel. Dus de regel met //Org moet je uit commentariëren en de regel met //Fix moet je toevoegen.

function check_plain($text) {
    static $php525;

    if (!isset($php525)) {
        $php525 = version_compare(PHP_VERSION, '5.2.5', '>=');
    }

    // We duplicate the preg_match() to validate strings as UTF-8 from
    // drupal_validate_utf8() here. This avoids the overhead of an additional
    // function call, since check_plain() may be called hundreds of times during
    // a request. For PHP 5.2.5+, this check for valid UTF-8 should be handled
    // internally by PHP in htmlspecialchars().
    // @see http://www.php.net/releases/5_2_5.php
    // @todo remove this when support for either IE6 or PHP < 5.2.5 is dropped.

    _if ($php525) {
        **//Org:** return htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
        **//Fix:**
        ** return (preg_match('/^./us', (string) $text) == 1) ? htmlspecialchars((string) $text, ENT_QUOTES, 'UTF-8') :** '';
    }
    return (preg_match('/^./us', $text) == 1) ? htmlspecialchars($text, ENT_QUOTES, 'UTF-8') : '';
}

Opmerking: Dit is een tijdelijke oplossing om de site draaiende te houden, het is niet de definitieve oplossing. Het probleem is gerapporteerd en dan kan de fix worden verwijderd.