[Решено] Preg_Replace_Callback и русские символы

Тема в разделе "Регулярные выражения", создана пользователем Gameer, 14 авг 2015.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. Gameer

    Gameer Постоялец

    Регистр.:
    25 апр 2014
    Сообщения:
    111
    Симпатии:
    68
    Здравствуйте все, есть код :

    PHP:
    $str ="#тестовая новость";
    $str preg_replace_callback('/(\#\w+)|\#[а-яёіїъ]+/mis',
         function(
    $matches){
           
    $url str_replace('#','',$matches[0]);
           
    $url urlencode($url);return'<a href="'.$url.'">'.$matches[0].'</a>';
         },
    $str);
    Суть кода в том что бы найти все вхождения слов с символом # и заменить на ссылку, для этого использую preg_replace_callback и анонимную функцию. Если символы латинские все хорошо, если русские то все плохо. Получаем такую картину

    [​IMG]
    Отдает вовсе японские символы, в первые с таким сталкиваюсь. Проверял как на локале так и не сервере, ответ один и тот же.

    Что не так в коде-то ?
     
  2. Aglok

    Aglok ∞³

    Регистр.:
    9 янв 2012
    Сообщения:
    162
    Симпатии:
    46
    У тебя не распознает русские символы. Необходимо поставить модификатор "u", который установит обработки строки в utf8.
    Код:
    '/(\#\w+])\s|\#[а-яёіїъ]+/umis'
     
    Gameer нравится это.
Статус темы:
Закрыта.