php preg_split 查找字符串中的所有单词无效

php preg_split to find all words in a string is not working

我正在使用 preg_split 将字符串拆分为单词。

但是,它不适用于从 mysql 文本列中获取的特定字符串。

如果我手动将字符串分配给一个变量,它将正常工作,但在从数据库中获取字符串时却不能。

这是我使用的简单代码:

//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);

下面是 preg_split returns 从数据库中调用字符串时的内容:

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." }

有谁知道是什么导致 preg_split 对该字符串失败?

谢谢

我用数据库中的字符串测试了你的代码,发生了同样的错误,改变正则表达式,你就会有解决方案。使用此表达式:

$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"
...
}

更新: 修饰符 /u 用于 UTF 8,可能你的数据库不是 UTF8,所以表达式不起作用

您不需要为此使用正则表达式,explode 即可:

$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);

输出:

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

Ideone Demo