PHP preg_replace на SEO URL не дает ожидаемых результатов - PullRequest
0 голосов
/ 03 апреля 2011

Итак, у меня есть этот метод:

$seo_special = array("ä", "õ", "ö", "ü", "Ä", "Õ", "Ö", "Ü");
$seo_special_replace = array("a", "o", "o", "u", "a", "o", "o", "u");
$seo_tag_a2b = str_replace($seo_special, $seo_special_replace, $row->name);
$seo_tag_a2b = preg_replace('/[^a-z0-9-]/i', '', strtolower(str_replace(' ', '-', trim($seo_tag_a2b))));

И я ожидаю, что он заменит специальные символы на обычные, но каким-то образом он пропускает эти символы, и результат для Põrandalaud / Liistparkett равен prandalaud - liistparkett , когда это должно быть porandalaud - liistparkett и я понятия не имею, что я делаю не так. Любая помощь будет оценена.

Ответы [ 2 ]

2 голосов
/ 03 апреля 2011

Вы можете использовать iconv для перевода странных символов в символы только ASCII.

setlocale(LC_ALL, 'en_US.UTF8');
function toAscii($str, $replace=array(), $delimiter='-') {
    if( !empty($replace) ) {
        $str = str_replace((array)$replace, ' ', $str);
    }

    $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
    $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean);
    $clean = strtolower(trim($clean, '-'));
    $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean);

    return $clean;
}

Тест:

echo toAscii("Mess'd up --text-- just (to) stress /test/ ?our! `little` \\clean\\ url fun.ction!?-->");
returns: messd-up-text-just-to-stress-test-our-little-clean-url-function

echo toAscii("Perché l'erba è verde?", "'"); // Italian
returns: perche-l-erba-e-verde

echo toAscii("Peux-tu m'aider s'il te plaît?", "'"); // French
returns: peux-tu-m-aider-s-il-te-plait

echo toAscii("Tänk efter nu – förr'n vi föser dig bort"); // Swedish
returns: tank-efter-nu-forrn-vi-foser-dig-bort

echo toAscii("ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöùúûüýÿ");
returns: aaaaaaaeceeeeiiiidnooooouuuuyssaaaaaaaeceeeeiiiidnooooouuuuyy

echo toAscii("Custom`delimiter*example", array('*', '`'));
returns: custom-delimiter-example

echo toAscii("My+Last_Crazy|delimiter/example", '', ' ');
returns: my last crazy delimiter example

Метод и кредиты на Идеальный PHP чистый генератор URL

А чтобы помочь вам с поиском в Интернете, вы можете найти 'url slug php'.

0 голосов
/ 03 апреля 2011

Это может быть несоответствие между кодировкой символов исходного файла PHP и кодировкой строки, которую вы обрабатываете.

Убедитесь, что они совпадают. Если вы работаете с данными UTF-8, вам необходимо убедиться, что файл PHP также хранится в UTF-8. В противном случае специальные символы будут иметь другие байтовые значения и не совпадать со значениями в $row->name.

...