【问题标题】:\w depends of the encoding?\w 取决于编码?
【发布时间】:2011-10-11 19:30:11
【问题描述】:

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

<?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 的字的字节相匹配。

【问题讨论】:

标签: php regex encoding pcre


【解决方案1】:

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

setlocale(LC_CTYPE, "cs_CZ");

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

setlocale(LC_COLLATE, "cs_CZ");

我也发现这种方法很困难 - 它没有用...... :)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多