2014-09-08 2 views
0

Я пытаюсь избавиться от некоторых символов в строке. Строка будет отправлена ​​по форме (метод: POST). Мне нужно получить строчную строку. Символы ä, ö, ü и ß должны стать ae, oe, ue и ss. Все другие специальные символы и пробелы должны быть удалены.Создайте строку slug из заголовка

Строка

Lorem_ipsum_Ö-ß &änyOther char 

должен стать

lorem-ipsum-oe-ss-aenyother-char 

Это мой код:

$slug = strtolower($_POST['title']); 
$slug = trim($slug, '-'); 
$slug = preg_replace('/ä/g', 'ae', $slug); 
$slug = preg_replace('/ö/g', 'oe', $slug); 
$slug = preg_replace('/ü/g', 'üe', $slug); 
$slug = preg_replace('/ß/g', 'ss', $slug); 
$slug = preg_replace('/[^\w ]/g', '', $slug); 
$slug = preg_replace('/ +/g', '-', $slug); 

Прежде всего, моя попытка не работает, как я хочу.

И второе: Как я могу уменьшить этот код? Я думаю, это можно получить в одном правильном выражении ...

+0

Пожалуйста, объясните "не работает" – Steve

+0

я не получаю результат. – user3142695

+0

модификатор '/ g' для' preg_match', удалить его, будет работать нормально. – Ohgodwhy

ответ

1

Вы всегда можете создать функцию, чтобы сделать это. Вы можете настроить это на свои нужды, вот пример.

function _replace($t) { 
    $map = array('Ä' => 'ae', 'ä' => 'ae', 'ß' => 'ss', 'Ö' => 'oe', 
       'ö' => 'oe', 'Ü' => 'ue', 'ü' => 'ue'); 
    $slug = strtr(strtolower(trim($t)), $map); 
    return preg_replace('~[\W_]+~', '-', $slug); 
} 

Demo

+0

Только одно примечание к этому: По-моему, вы должны использовать регулярное выражение, когда вам нужно использовать регулярное выражение. Иначе это сделает ваш код бессмысленно сложным. Я, честно говоря, не ** думаю, что это пример использования для регулярного выражения. – Xatenev

1

Модификатор /g для preg_match. Вы можете использовать preg_match_all или можете просто удалить его.

Here's your eval.in

С другой стороны, если вы просто хотите, чтобы сделать из очистителя URL-адреса этого, и вы пытаетесь ВЗ минимизировать код в 1-лайнер, мы могли бы использовать iconv с TRANSLIT перевести кодировку в ближайшую кодировку по нашему выбору, такую ​​как UTF-8, тогда вы можете перенести все это на 1 лайнер.

$slug = strtolower(urlencode(preg_replace('/[\s\-]/', '', iconv('utf-8', 'ascii//TRANSLIT',$str)))); 

Here's the eval.in for this example

+0

Возможно ли оптимизировать код? Или мне нужно взять восемь одиночных строк? – user3142695

+0

@ user3142695 см. Обновленный ответ, пожалуйста. – Ohgodwhy

Смежные вопросы