Я сейчас сопоставляю HTML с помощью этого кода: preg_match('/<\/?([az]+)[^>]*>|&#?[a-zA-Z0-9]+;/u', $html, $match, PREG_OFFSET_CAPTURE, $position) Он соответствует всем совершенным, однако, если у меня многобайтовый символ, он учитывает его как 2 символа при возвращении позиции. Например, возвращаемый массив $match даст что-то вроде: array 0 => array 0 => string '<br />' (length=6) 1 => int 132 1 => […]
Я ищу многобайтную функцию для замены preg_match_all() . Мне нужен тот, который даст мне массив согласованных строк, например аргумент $matches matches из preg_match() . Функция mb_ereg_match() , похоже, не делает этого – это только дает мне логическое значение, указывающее на наличие совпадений. Глядя на страницу функций mb_ *, я не вижу ничего, что заменяет функциональность […]
Я пытаюсь сделать акцентированную замену символов на PHP, но получаю фанковые результаты, полагаю, потому, что я использую строку UTF-8, а str_replace не может правильно обрабатывать многобайтовые строки. $accents_search = array('á','à','â','ã','ª','ä','å','Á','À','Â','Ã','Ä','é','è', 'ê','ë','É','È','Ê','Ë','í','ì','î','ï','Í','Ì','Î','Ï','œ','ò','ó','ô','õ','º','ø', 'Ø','Ó','Ò','Ô','Õ','ú','ù','û','Ú','Ù','Û','ç','Ç','Ñ','ñ'); $accents_replace = array('a','a','a','a','a','a','a','A','A','A','A','A','e','e', 'e','e','E','E','E','E','i','i','i','i','I','I','I','I','oe','o','o','o','o','o','o', 'O','O','O','O','O','u','u','u','U','U','U','c','C','N','n'); $str = str_replace($accents_search, $accents_replace, $str); Результаты: Ørjan Nilsen -> orjan Nilsen Ожидаемый результат: Ørjan Nilsen -> Orjan Nilsen […]