Drupal 6 preg_replace Compilation failed: disallowed Unicode code point (>= 0xd800 && <= 0xdfff)
Letzte Änderung am 04.07.2013
Seit dem Update von PCRE auf Version 8.30 (Drupal 6.24 und 6.25, FreeBSD 9, PHP 5.3.10) wird die folgende Warnung bei der Verwendung der Suchfunktion angezeigt.
[Update]
Mit Drupal 6.26 (genauer: PHP 5.3.13, PCRE 8.30_2) ist dieses Problem behoben.
warning: preg_replace() [function.preg-replace]: Compilation failed: disallowed Unicode code point (>= 0xd800 && <p>Das ist in sofern ärgerlich, weil dieses Modul auch von <a href="https://drupal.org/project/search404">search404</a> verwendet wird.</p> <p>Auf der Drupalseite werden nur aktuellere Versionen diskutiert, ein Fix, der unter<br /><a href="http://drupal.org/node/1442876">Getting errors during install about preg_match() disallowed Unicode code point</a><br /> diskutiert wird, führt aber auch zur Lösung im genannten Problem. In der Datei</p> <code> modules/search/search.module
direkt am Anfang des Scripts wird PREG_CLASS_SEARCH_EXCLUDE definiert, hier die letzten drei Zeilen
<?php
'\x{a806}\x{a80b}\x{a823}-\x{a82b}\x{d800}-\x{f8ff}\x{fb1e}\x{fb29}\x{fd3e}'.
'\x{fd3f}\x{fdfc}-\x{fe6b}\x{feff}-\x{ff0f}\x{ff1a}-\x{ff20}\x{ff3b}-\x{ff40}'.
'\x{ff5b}-\x{ff65}\x{ff70}\x{ff9e}\x{ff9f}\x{ffe0}-\x{fffd}');
?>
gegen
<?php
'\x{a80b}\x{a823}-\x{a82b}\x{f8ff}\x{fb1e}\x{fb29}\x{fd3e}\x{fd3f}\x{fdfc}-' .
'\x{fe6b}\x{feff}-\x{ff0f}\x{ff1a}-\x{ff20}\x{ff3b}-\x{ff40}\x{ff5b}-\x{ff65}' .
'\x{ff70}\x{ff9e}\x{ff9f}\x{ffe0}-\x{fffd}');
?>
ersetzen - oder angehängten Patch
--- modules/search/search.module.orig 2012-02-23 12:05:16.812776466 +0100 +++ modules/search/search.module 2012-02-23 11:42:14.273778375 +0100 @@ -43,9 +43,9 @@ '\x{2ce5}-\x{2cff}\x{2d6f}\x{2e00}-\x{3005}\x{3007}-\x{303b}\x{303d}-\x{303f}'. '\x{3099}-\x{309e}\x{30a0}\x{30fb}\x{30fd}\x{30fe}\x{3190}-\x{319f}\x{31c0}-'. '\x{31cf}\x{3200}-\x{33ff}\x{4dc0}-\x{4dff}\x{a015}\x{a490}-\x{a716}\x{a802}'. -'\x{a806}\x{a80b}\x{a823}-\x{a82b}\x{d800}-\x{f8ff}\x{fb1e}\x{fb29}\x{fd3e}'. -'\x{fd3f}\x{fdfc}-\x{fe6b}\x{feff}-\x{ff0f}\x{ff1a}-\x{ff20}\x{ff3b}-\x{ff40}'. -'\x{ff5b}-\x{ff65}\x{ff70}\x{ff9e}\x{ff9f}\x{ffe0}-\x{fffd}'); +'\x{a80b}\x{a823}-\x{a82b}\x{f8ff}\x{fb1e}\x{fb29}\x{fd3e}\x{fd3f}\x{fdfc}-' . +'\x{fe6b}\x{feff}-\x{ff0f}\x{ff1a}-\x{ff20}\x{ff3b}-\x{ff40}\x{ff5b}-\x{ff65}' . +'\x{ff70}\x{ff9e}\x{ff9f}\x{ffe0}-\x{fffd}'); /** * Matches all 'N' Unicode character classes (numbers)
im Drupalverzeichnis mit
patch -pl <p>anwenden.</p> <h2>Drupal Projekt Chaos tool suite (ctools) 6.x-1.8</h2> <p>Im Modulverzeichnis in der Datei</p> <code> ctools/includes/cleanstring.inc
wird ebenfalls diese Definition verwendet und muss vielleicht auch bei einem Fehler angepasst werden.
Kommentare
Gast (nicht überprüft)
20. April 2012 - 7:20
Permanenter Link
Hallo Stefan, danke für diese
Hallo Stefan,
danke für diese Tipps, bekomme nach Update von ctools, date, token, media und colorbox immer diese Fehlermeldung:
•Warning: preg_match(): Compilation failed: disallowed Unicode code point (>= 0xd800 && <= 0xdfff) at offset 2112 in truncate_utf8() (Zeile 339 von /usr/share/drupal7/includes/unicode.inc).
•Warning: preg_match(): Compilation failed: disallowed Unicode code point (>= 0xd800 && <= 0xdfff) at offset 2112 in truncate_utf8() (Zeile 339 von /usr/share/drupal7/includes/unicode.inc).
•Warning: preg_match(): Compilation failed: disallowed Unicode code point (>= 0xd800 && <= 0xdfff) at offset 2112 in truncate_utf8() (Zeile 339 von /usr/share/drupal7/includes/unicode.inc).
Ich bin auf 7.12 unterwegs. Vielleicht liegt es ja an ctools.- Kannst du auch kurz erklären, was bei ctools - möglichst ohnePatch zu machen ist?
dank dir.-
frank
stefan
20. April 2012 - 8:19
Permanenter Link
Hallo Frank, wie die
wie die Fehlermeldung aussagt, das liegt an der Datei
oder genauer bei Dir
Ohne Patch ist da nichts zu machen. Bei Drupal 7.12 hat mir der Patch do-1446372-remove-surrogates.patch weiter geholfen:
https://www.drupal.org/files/do-1446372-remove-surrogates.patchDen Patch kannst Du natürlich auch manuell durchführen. Dazu die Datei includes/unicode.inc in einem Editor öffnen; weit oben in der Datei wird die Konstante
<?php
define('PREG_CLASS_UNICODE_WORD_BOUNDARY',
?>
definiert.
Innerhalb dieser Definition die drittletzte Zeile (Zeile 76 in der Datei) suchen
<?php
'\x{D800}-\x{F8FF}\x{FB29}\x{FD3E}-\x{FD3F}\x{FDFC}-\x{FDFD}' .
?>
und zu Beginn D800 gegen E000 (hexadezimal, 0 = Ziffer Null) ersetzen.
In der Zeile 339, in der der Fehler auftritt wird diese Konstante verwendet.
Viel Erfolg!Stefan
Gast (nicht überprüft)
24. April 2012 - 14:36
Permanenter Link
Hallo Stefan, danke nochmal
Hallo Stefan,
danke nochmal für die Hilfestellung.- Mein Provider hat mittlerweile die Zeilen geändert und jetzt gibts keine Fehlermeldung mehr.- Das Problem hat auch nix mit Ctools oder sonst einem Nicht Drupal-Kernmodul zu tun, da der Fehler auch bei einer Neuinstallation aufgetaucht ist.-
vg, frank
stefan
24. April 2012 - 15:19
Permanenter Link
Das ist richtig, es liegt an
Das ist richtig, es liegt an dem Update auf die Version 8.30 von PCRE, die Perl kompatiblen regulären Ausdrücke (Perl Compatible Regular Expressions).
Die ctools sind auch betroffen, der Fehler wirkt sich nur deswegen nicht aus, weil das betreffende Script nicht ausgeführt wird. Die Konstante CTOOLS_PREG_CLASS_ALNUM in der Datei tools/includes/cleanstring.inc ist eine Kopie von PREG_CLASS_SEARCH_EXCLUDE, die den Fehler verursacht hat. Diese Konstante wird in der Funktion ctools_cleanstring() in einem regulären Ausdruck benutzt und kann dort die Fehlermeldung produzieren.
b3d (nicht überprüft)
26. Juni 2013 - 14:23
Permanenter Link
Vielen Dank, das hat geholfen
Vielen Dank, das hat geholfen :)