2016-04-26 11 views
0

Ich verwende preg_split, um eine Zeichenfolge in Wörter zu teilen.php preg_split, um alle Wörter in einer Zeichenfolge zu finden funktioniert nicht

Es funktioniert jedoch nicht für eine bestimmte Zeichenfolge, die aus einer mysql-Textspalte abgerufen wird.

Wenn ich die Zeichenfolge manuell einer Variablen zuweisen, wird es korrekt funktionieren, aber nicht, wenn die Zeichenfolge aus der Datenbank abgerufen wird. Hier

ist der einfache Code verwende ich:

//The failing string. When manually assigned like this it works correctly 

$string = "<p><strong>Iden is lesz lehetoseg a foproba és a koncert napjan ebedet kerni a MUPA-ban. Ára 1000-1200 Ft körül várható. Azoknak, akik még nem jártak a MUPA-ban ingyenes bejarasi lehetoseget biztositunk. Tovabba segitunk a pesti szallas megszervezeseben is, ha igenyt tartotok ra.</strong></p>"; 

$string = strip_tags(trim($string)); 

$words = preg_split('/\PL+/u', $string, null, PREG_SPLIT_NO_EMPTY); 

Hier ist, was die preg_split kehrt zurück, wenn auf der Zeichenfolge aus der Datenbank mit dem Namen:

array(1) { [0]=> string(269) "Iden is lesz lehetoseg a foproba és a koncert napjan ebedet kerni a MUPA-ban. Ára 1000-1200 Ft körül várható. Azoknak, akik még nem jártak a MUPA-ban ingyenes bejarasi lehetoseget biztositunk. Tovabba segitunk a pesti szallas megszervezeseben is, ha igenyt tartotok ra." } 

Weiß jemand, was preg_split verursacht zu für diese Zeichenfolge fehlschlagen?

Dank

+0

Wie funktioniert es nicht genau? –

+0

@mistermartin - Bitte fragen Sie nach, was es zurückgibt. Es gibt den gesamten String zurück, anstatt es zu teilen –

+0

[Der Code sieht funktioniert] (http://ideone.com/UhokFC). Vielleicht ist "-1" besser als "null"? Versuchen Sie '$ words = preg_split ('/ \ PL +/u', $ string, -1, PREG_SPLIT_NO_EMPTY);' –

Antwort

1

ich Ihren Code mit einer Zeichenfolge aus der Datenbank getestet und den gleichen Fehler passiert ist, die regelmäßige expresion ändern, und Sie werden die Lösung. Verwenden Sie diesen Ausdruck:

$words = preg_split('/[\s]/', $string, null, PREG_SPLIT_NO_EMPTY); 


//var_dump result 

array(42) { 
    [0]=> 
    string(4) "Iden" 
    [1]=> 
    string(2) "is" 
    [2]=> 
    string(4) "lesz" 
    [3]=> 
    string(9) "lehetoseg" 
... 
} 

UPDATE: Der Modifikator/u sind für UTF-8, vielleicht Ihre Datenbank nicht in UTF-8 ist, und so hat der Ausdruck nicht funktioniert

0

Sie brauchen nicht ein regex dafür, explode wird die Arbeit machen:

$string = "<p><strong>Iden is lesz lehetoseg a foproba és a koncert napjan ebedet kerni a MUPA-ban. Ára 1000-1200 Ft körül várható. Azoknak, akik még nem jártak a MUPA-ban ingyenes bejarasi lehetoseget biztositunk. Tovabba segitunk a pesti szallas megszervezeseben is, ha igenyt tartotok ra.</strong></p>"; 
$string = strip_tags(trim($string)); 
$words = explode(" ", $string); 
print_r($words); 

Ausgang:

Array 
(
    [0] => Iden 
    [1] => is 
    [2] => lesz 
    [3] => lehetoseg 
    [4] => a 
    [5] => foproba 
    [6] => és 
    [7] => a 
    [8] => koncert 
... 

Ideone Demo