Simple Html Dom - как сделать регистро-независимый поиск

Тема в разделе "Как сделать...", создана пользователем jabbaxatt, 12 апр 2013.

Статус темы:
Закрыта.
  1. jabbaxatt

    jabbaxatt Добрый модератор

    Moderator
    Регистр.:
    21 янв 2009
    Сообщения:
    878
    Симпатии:
    411
    Simple Html Dom - как можно заставить искать признаки без учёта регистра?

    Т.е. в коде ниже я ищю все ссылки с анкором Вася. Но я так-же хочу чтобы он брал ссылки с анкором ВАСЯ, вася, ВаСя и т.д. А он берёт только Вася, с учётом регистра. Гугл не помог.

    PHP:
    $html file_get_html($url);
     
    $tempstr='a[plaintext*=Вася]';
    $a $html->find($tempstr);
     
  2. ne4to

    ne4to Постоялец

    Регистр.:
    16 ноя 2012
    Сообщения:
    107
    Симпатии:
    50
    Код:
    $tempstr='a[plaintext*=Вася]';
    $a = $html->find($tempstr,null,true);
    
    + заменить
    Код:
    $check = $this->match($exp, strtolower($val), strtolower($nodeKeyValue));
    
    на
    Код:
    $check = $this->match($exp, mb_strtolower($val), mb_strtolower($nodeKeyValue));
    
     
    jabbaxatt нравится это.
  3. jabbaxatt

    jabbaxatt Добрый модератор

    Moderator
    Регистр.:
    21 янв 2009
    Сообщения:
    878
    Симпатии:
    411
    Немного не понял что происходит в Вашем примере.

    Сам пока тупо сделал mb_strtolower() для всего текста и искал уже заведомо приведённый в нижний регистр "вася". Так сказать грубо, костыль, но работает. Конечно правильное решение тоже всё ещё интересно.

    Что такое $exp? Да и остальное не совсем понятно, можно комментарии по переменным и сути происходящего?
     
  4. ne4to

    ne4to Постоялец

    Регистр.:
    16 ноя 2012
    Сообщения:
    107
    Симпатии:
    50
    загляните в код Simple Html Dom
    а именно в функцию find

    Код:
    function find($selector, $idx=null, $lowercase=false)
    из сего понятно что в параметрах можно задать нечувствительность к регистру $lowercase

    что я собственно Вам и посоветовал сделать
    Код:
    $a = $html->find($tempstr,null,true);
    но это все прекрасно работает с англ текстом, и чтобы оно заработало с рус, Вам надо внести изменения в функции seek,
    заменить строку
    Код:
    $check = $this->match($exp, strtolower($val), strtolower($nodeKeyValue));
    на
    Код:
    $check = $this->match($exp, mb_strtolower($val), mb_strtolower($nodeKeyValue));
     
    jabbaxatt нравится это.
Статус темы:
Закрыта.