Бьюсь над проблемой utf8 и регулярными выражениями.

CMD

Новичок
Бьюсь над проблемой utf8 и регулярными выражениями.

Задача вроде простая. Получили рефер (переход из поисковика) , надо выдрать слово по которому искали и удалить из него все символы не входящие в \w , все работает прекрасно пока.. пока не получаем данные в рефере в utf-8 кодировке. например такой рефер:

http://search.yahoo.co.jp/search?p=speech&fr=top_v2&tid=top_v2&ei=euc-jp&search.x=1&x=33&y=7
(тут ?p=speech)

как делаю я:
получаем рефер>находим интересующую нас переменную (в данном случае ?p=) и забираем ее значение.
до этого момента все ок. потом вот этой функцией удаляю все возможные знаки из полученного значения, не входящие в набор \w

PHP:
function escapeGetParam($param, $encode = 1){
    $param = preg_replace("{[^\w]+}i", " ", $param); // сдесь проблема!
    $param = preg_replace("{\s+}", " ", $param);
    $param = htmlspecialchars($param);
    $param = trim(strtolower($param));
    if($encode == 1){
        $param = urlencode($param);
    }
    return $param;
}
все, после применения этой функции к данным которые нужно отфильтровать, они либо теряются либо переводятся в бесполезную белиберду. в данном случае просто удалились все данные. :( т.е. регулярное выражение просто не воприняло
данные адекватно и удалило все.

как это победить? т.е. мне в идеале нужно независимо в какой кодировке пришли данные, суметь их отфильтровать.

можно ли проверить в какой кодировке пришли данные? (перекодировать их тогда не проблема с помощью iconv)

вот наткнулся на полезный материал но не совсем его понял: http://www.phpwact.org/php/i18n/utf-8
 

CMD

Новичок
donflash, угу попробовал так
PHP:
function escapeGetParam($param, $encode = 1){
    $param = preg_replace("{[^\w]+}iu", " ", $param); // сдесь проблема!
    $param = preg_replace("{\s+}", " ", $param);
    $param = htmlspecialchars($param);
    $param = trim(strtolower($param));
    if($encode == 1){
        $param = urlencode($param);
    }
    return $param;
}

не помогло :(
 

CMD

Новичок
угу, комментарии на php.net всегда оч полезны, но не помогли :( точнее ситуация повторилась после вызова функции escapeGetParam() данные в утф8 испортились в белиберду :(

-~{}~ 15.01.07 06:48:

ast-ross,угу это видел, спасибо, но на сервере к сож пхп собран без --enable-mbstring, если другого решения не найду то пересобиру
 

ast-ross

Новичок
Автор оригинала: CMD
ast-ross,угу это видел, спасибо, но на сервере к сож пхп собран без --enable-mbstring, если другого решения не найду то пересобиру
Если уж работаешь с unicode, то лучше один раз пересобрать с mbstring чем при каждой проблеме искать "другое решение"...
 
Сверху