2011-07-23 34 views
3

我已經從編碼搜索的單詞邊界有: w取決於編碼?

<?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])."]";} 
    } 
?> 

我不知道它是錯誤的。 但是總是給我某些職位,不管charset是什麼樣的。 似乎總是,無論使用何種編碼,'\ w'都與來自ISO-8859-1的字符相匹配。

+0

@hakre你很迷惑\ b,cuz \ w確實匹配一個單詞字符。 http://www.regular-expressions.info/reference.html – nEAnnam

回答

2

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

setlocale(LC_CTYPE, "cs_CZ"); 

來處理它。這會影響正則表達式中\ w,\ b的行爲,但也會影響strtoupper()。 如果你還需要整理和字符串的比較工作得很好,你可以使用(取決於您所在的國家/區域設置)是這樣的:

setlocale(LC_COLLATE, "cs_CZ"); 

我也發現這個硬盤的方式 - 它沒有工作.. :)

那麼,回答你的原始問題 - 你不能影響這與header()函數,因爲這只是告訴編碼到瀏覽器。你需要的是在服務器上改變PHP的行爲,這是通過上面的命令完成的。