Титла: Функция за откриване последното място на стринг в друг стринг. Публикувано от: kennedy в Aug 24, 2011, 20:17 покрай предната тема реших да доработя скрипта и се натъкнах на следния проблем.
искам да определя къде е последната таблица и да я елиминирам преди да мине екстрактора на адреси. имам една функция която върши уж тази работа Цитат function strrpos_new($haystack, $needle, $offset = 0) справя се чудесно ако търся "table" но не може да търси нищо на кирилица нито да намери "<table>" ... нямам идея защо ... та има ли някой функция която връща последната позиция на стринг в друг, но да работи с кирилица и символи като <> Титла: Re: Функция за откриване последното място на стринг в друг стринг. Публикувано от: Naka в Aug 24, 2011, 22:19 Ами ако входящият стринг е в utf8 няма да работи - независмо дали подаваш кирилица или китайски.
Повечето стрингови функции не работят кореткно при utf8 стрингове. Затова си имат аналози с mb_xxxxxx отпред. В случая функията успява да намери правилно "table" даже и в utf8 стринг, защото ascii символите имат пак същата кодировка и в utf8. http://www.php.net/manual/en/function.mb-strpos.php и strlen() също няма да работи правилно. http://php.net/manual/en/function.mb-strlen.php Частен случай е обаче ако подаваш кирилица в cp1251. Тогава функцията ще търси правилно и на кирилица, но задължително преди да я извикаш трябва да се зададе locale в 1251: http://www.php.net/manual/en/function.setlocale.php Ако си пренапишеш функцията с mb_ аналозите, locale няма да ти трябва и ще работи всякак. ------------------------------------------ това упражнение го правя с preg_match_all() и флаг PREG_OFFSET_CAPTURE обаче и там има грешка/подробност, че preg_match_all връща отместването в байтове (а не в utf8 символи) и затова офсета след това го нормализирам, да показва коректно отместването в символи. |