PHP stürzt bei preg_replace ab



1 Answers

vielleicht wird das helfen:

Diese Eigenschaften sind normalerweise nur verfügbar, wenn PCRE mit "--enable-unicode-properties" kompiliert wurde.

http://docs.php.net/manual/de/regexp.reference.unicode.php#96479

Question

Ich habe das folgende Skript mit php.exe :

preg_replace('#(?:^[^\pL]*)|(?:[^\pL]*$)#u','',$string);

oder sein Äquivalent:

preg_replace('#(?:^[^\pL]*|[^\pL]*$)#u','',$string);

Wenn $string="S" oder $string=" ذذ " , funktioniert es, wenn string='ذ' es ergibt das ist falsch, und wenn string='ذذ' stürzt PHP ab.

Aber es funktioniert in den Versionen 4.4.0 - 4.4.9, 5.0.5 - 5.1.6.

Was ist falsch ?

Siehe : http://3v4l.org/T3rpV

<?php
$string='دد';
echo preg_replace('#(?:^[^\pL]*)|(?:[^\pL]*$)#u','',$string);

Ausgabe für 5.4.0 - 5.5.0alpha6

Process exited with code 139.

Ausgabe für 5.2.0 - 5.3.22, 5.5.0beta1

Ausgabe für 4.4.0 - 4.4.9, 5.0.5 - 5.1.6

دد 

Ausgabe für 4.3.11, 5.0.0 - 5.0.4

Warning: preg_replace(): Compilation failed: PCRE does not support \L, \l, \N, \P, \p, \U, \u, or \X at offset 7 in /in/T3rpV on line 3 

Ausgabe für 4.3.0 - 4.3.10

Warning: Compilation failed: PCRE does not support \L, \l, \N, \P, \p, \U, \u, or \X at offset 7 in /in/T3rpV on line 3



Verwenden Sie preg_quote und Sie müssen das Sonderzeichen vor der Verwendung mit Ihrer Regex ordnungsgemäß entkommen. Beispielsweise:

<?php
$string = preg_quote("\دد");
echo preg_replace('#(?:^[^\pL]*)|(?:[^\pL]*$)#u','',$string);

Sehen Sie es in Aktion: http://3v4l.org/LeBXg

Mehr über preg_quote .

Prost,

Ardy






Related