php preg_split和UTF-8符号

时间:2012-04-17 21:25:49

标签: php utf-8 preg-split

有人可以解释一下,为什么这段代码

$string='6аd_ТЕХТ GOOD_TEXT';
$words = preg_split('/\s+/', $string, NULL, PREG_SPLIT_NO_EMPTY);

var_dump($words);

显示器

array(2) { [0]=> string(8) "6àd_ÒÅÕÒ" [1]=> string(9) "GOOD_TEXT" }

而不是

array(2) { [0]=> string(8) "6аd_ТЕХТ" [1]=> string(9) "GOOD_TEXT" }

我已经阅读了这个问题,但添加了/ u:

preg_split('/\s+/', $string, NULL, PREG_SPLIT_NO_EMPTY);// '/\s+/'

成为

preg_split('/\s+/u', $string, NULL, PREG_SPLIT_NO_EMPTY);// '/\s+/u'

无济于事。 如何解决这个问题?

谢谢。

2 个答案:

答案 0 :(得分:1)

您的代码中还有其他内容在提供的示例中不存在。测试了提供的示例,它按预期工作。如果 真正发生的可能性很小(并且没有其他代码影响$string),这可能是您正在使用的特定PHP版本的错误,可以解决通过升级PHP(但这不太可能是PHP的问题)。

答案 1 :(得分:0)

......我说这是斜线,但显然是utf-8的东西让它发挥作用。

编辑:我删除了其余部分,发现我需要的只是xml行,以使其在浏览器中运行。

<?php
ini_set('default_charset','utf-8');
header('Content-type: text/html; charset=utf-8');

echo '<?xml version="1.0" encoding="UTF-8"?'.'>
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head><body><pre>
';

$string = "6аd_ТЕХТ GOOD_TEXT";
var_dump(preg_split('/\s+/u', $string, NULL, PREG_SPLIT_NO_EMPTY));

echo '</pre></body></html>';

这是输出:

array(2) {
  [0]=>
  string(13) "6аd_ТЕХТ"
  [1]=>
  string(9) "GOOD_TEXT"
}