php preg_分割和UTF-8符号

php preg_分割和UTF-8符号,php,utf-8,preg-split,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

有谁能解释一下,为什么会有这种代码

$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'
没用。 如何解决这个问题


谢谢。

。。。我说是斜线,但显然是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>';

。。。我说是斜线,但显然是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>';

您的代码中还发生了一些在所提供的示例中没有出现的事情。对提供的示例进行了测试,结果与预期一致。如果这种情况真的发生了(并且没有其他代码影响
$string
),这可能是您正在使用的特定PHP版本的一个错误,可以通过升级PHP来解决(但这不太可能是PHP的问题)。对提供的示例进行了测试,结果与预期一致。如果这种情况真的发生了(并且没有其他代码影响
$string
),这可能是您正在使用的特定PHP版本的一个错误,可以通过升级PHP来解决(但这不太可能是PHP的问题).

ASCII安全字符串不能成为仅使用
preg\u split
ASCII安全字符串不能成为仅使用
preg\u split
显示的字符串。在某些背景下,PHP要求转义
preg\u
函数中的反斜杠。因此,如果您想使用
``来转义某些内容,则需要使用
\``。如果要使用文字反斜杠,必须使用“\\\”。巨大的痛苦,但它是有效的。@bfrohs你是对的。我甚至没有用一个斜杠来测试它。把它拿出来,效果很好。我想只是需要utf8来告诉php该怎么做。@bfrohs实际上,我开始删除这些东西,发现是xml标记做的。php很好地处理了其余的问题。是的,它通常工作得很好,但这是一个很好的习惯,可以避免以后的问题:)在某些背景下,php需要在
preg
函数中转义反斜杠。因此,如果您想使用
``来转义某些内容,则需要使用
\``。如果要使用文字反斜杠,必须使用“\\\”。巨大的痛苦,但它是有效的。@bfrohs你是对的。我甚至没有用一个斜杠来测试它。把它拿出来,效果很好。我想只是需要utf8来告诉php该怎么做。@bfrohs实际上,我开始删除这些东西,发现是xml标记做的。php很好地处理了其余的问题。是的,它通常工作得很好,但这是一个很好的习惯,可以避免以后出现问题:)