Я пытаюсь начать использовать Travis для непрерывной интеграции, и все наши тесты проходят, кроме одного, хотя и проходят на наших локальных (OSX) машинах. Этот метод предназначен для анализа слагов, замены акцентированных символов на неакцентированные версии и других специальных символов дефисами. Он выглядит следующим образом:
public function sanitize(array $substitutions = array('&' => 'and'))
{
foreach ($this->_segments as $i => $segment) {
// Perform substitutions
foreach ($substitutions as $find => $replace) {
$segment = str_replace($find, $replace, $segment);
}
// Transliterate
if (function_exists('iconv')) {
$segment = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $segment);
// Remove any weird characters added by the transliteration
$segment = str_replace(array('"', '\'', '`', '^'), '', $segment);
}
// Lowercase
$segment = strtolower($segment);
// Replace any non-alphanumeric characters with hyphens
$segment = preg_replace('/[^a-z0-9]/i', '-', $segment);
// Set any double hyphens to just a single hyphen
$segment = preg_replace('/-+/i', '-', $segment);
// Remove any hyphens at the start or end
$segment = trim($segment, '-');
$this->_segments[$i] = $segment;
}
return $this;
}
и тест это:
public function testSanitize()
{
$segments = array(
'(MY Website',
'bløgs',
'march!/2013',
'me & you',
'50 % 5 = 10.00',
'YåYéî!',
);
$slug = new Slug($segments);
$this->assertSame($slug, $slug->sanitize());
$this->assertSame(array(
'my-website',
'blogs',
'march-2013',
'me-and-you',
'50-5-10-00',
'yayei',
), $slug->getSegments());
}
Ошибка происходит потому, что при преобразовании строк то, что должно быть «блогами», заканчивается как «bl-gs». Как уже говорилось, это прекрасно работает на наших локальных машинах. После много тестируя и пытаясь заставить это работать, я могу определенно подтвердить, что iconv
Расширение определенно существует на сервере Travis, поэтому я немного растерялся, в чем проблема.
Я собираюсь связать это с разницей в версиях iconv. Смотря на Замена акцентированных символов php дал мне хорошее представление о символах, которые не включены в iconv, поэтому я просто вручную добавил эти замены в метод
Других решений пока нет …