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
все, после применения этой функции к данным которые нужно отфильтровать, они либо теряются либо переводятся в бесполезную белиберду. в данном случае просто удалились все данные.
т.е. регулярное выражение просто не воприняло
данные адекватно и удалило все.
как это победить? т.е. мне в идеале нужно независимо в какой кодировке пришли данные, суметь их отфильтровать.
можно ли проверить в какой кодировке пришли данные? (перекодировать их тогда не проблема с помощью iconv)
вот наткнулся на полезный материал но не совсем его понял: http://www.phpwact.org/php/i18n/utf-8
Задача вроде простая. Получили рефер (переход из поисковика) , надо выдрать слово по которому искали и удалить из него все символы не входящие в \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