\ w取决于编码?

时间:2011-07-23 21:11:19

标签: php regex encoding pcre

我一直在用编码搜索单词边界:

<?php
header('Content-Type: text/plain; charset="ISO-8859-7"');//Changing the charset attribute
$i=0;
for($i=0;$i<=255;$i++){
    $char=chr($i);  
    if(preg_match('/^\w$/',$char,$m)){
    echo "[".ord($m[0])."]";}
    }
?>

我不知道它是错的。 但总是给我一些立场,不管是什么字符集都是伪装的。 似乎总是,无论采用何种编码,'\ w'都匹配来自ISO-8859-1的字节。

1 个答案:

答案 0 :(得分:2)

是的! \ w,\ b受字符集的影响! 在我的代码中,我使用:

setlocale(LC_CTYPE, "cs_CZ");

来处理它。这会影响\ w,\ b在regexp中的行为,但也会影响strtoupper()。 如果您还需要排序和比较字符串才能正常工作,您可以使用(取决于您所在的国家/地区):

setlocale(LC_COLLATE, "cs_CZ");

我也发现了这种困难的方式 - 它没有用......:)

所以,回答你原来的问题 - 你不能用header()函数来影响这个,因为这只是告诉浏览器的编码。您需要的是在服务器上更改PHP的行为,这是通过上述命令完成的。