Поддержка Проблемы и решения проблема с seems_utf8 при включенном mbstring.func_overload

  • Проблема собственно в функции remove_accents из файла wp-includes/formatting.php Если в строке встречаются буквы ы,я и ещё какая-то, seems_utf8 возвращает, что это не юникод, и remove_accents ломает строку в хлам, а потом плагины вроде RusToLat заменяют её на нечто вроде: dhddhdhd…

    Собственно вот код функции seems_utf8, и совсем не очевидно, что здесь не так. Подскажите, пожалуйста, как с этим правильно бороться, и если это баг, то стоит ли ждать что его пофиксят?

    function seems_utf8($str) {
    	$length = strlen($str);
    	for ($i=0; $i < $length; $i++) {
    		$c = ord(substr($str, $i, 1)); // $str[$i]
    		if ($c < 0x80) $n = 0; # 0bbbbbbb
    		elseif (($c & 0xE0) == 0xC0) $n=1; # 110bbbbb
    		elseif (($c & 0xF0) == 0xE0) $n=2; # 1110bbbb
    		elseif (($c & 0xF8) == 0xF0) $n=3; # 11110bbb
    		elseif (($c & 0xFC) == 0xF8) $n=4; # 111110bb
    		elseif (($c & 0xFE) == 0xFC) $n=5; # 1111110b
    		else return false; # Does not match any model
    
    		for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ?
    			if ((++$i == $length) || ((ord(substr($str, $i, 1)) & 0xC0) != 0x80)) // $str[$i]
    				return false;
    		}
    	}
    	return true;
    }

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • а потом плагины вроде RusToLat

    ..которые приказали долго жить ещё в эпоху доисторического материализма?

    которые приказали долго жить ещё в эпоху доисторического материализма?

    Допустим, как тогда актуальным способом преобразовать заголовок кириллицей в slug? Да и не в плагине дело, ему на вход уже приходит убитая remove_accents строчка…

    Да и не в плагине дело, ему на вход уже приходит убитая remove_accents строчка…

    Не знаю-не знаю… Пользуясь актуальной дочкой упомянутого плага никогда не видел подобных проблем.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Спасибо за сообщение, проблема подтверджена. Ссылка ломается и без плагинов.

    Написал в багтрекер: #28162. Думаю, будет исправлено в 4.0.

    В качестве временной меры можно отключить mbstring.func_overload или попробовать патч из багтрекера.

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Тема «проблема с seems_utf8 при включенном mbstring.func_overload» закрыта для новых ответов.