我一直在使用以下编码搜索单词边界:
<?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 的字节。
最佳答案
是的!\w、\b受字符集影响! 在我的代码中,我使用:
setlocale(LC_CTYPE, "cs_CZ");
处理它。这会影响正则表达式中\w、\b 的行为,也会影响 strtoupper()
。
如果您还需要对字符串进行排序和比较才能正常工作,您可以使用(取决于您的国家/地区)类似的东西:
setlocale(LC_COLLATE, "cs_CZ");
我也发现了这个困难的方法 - 它没有用......:)
所以,回答你原来的问题 - 你不能用 header()
函数影响它,因为它只是告诉浏览器编码。您需要的是在服务器端更改 PHP 的行为,这是通过上述命令完成的。
关于php -\w 取决于编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6803334/