PHP - функция для «очистки» строки - PullRequest
2 голосов
/ 15 июня 2011

есть ли какая-либо PHP-функция, которая заменяет пробелы и подчеркивания в строке тире?

Как:

Some Word

Some_Word

Some___Word

Some     Word

Some ) # $ ^ Word

=> some-word

в основном очищенная строка должна содержать только a-z символов, чисел (0-9) и тире (-).

Ответы [ 6 ]

11 голосов
/ 15 июня 2011

Это должно дать желаемый результат:

$someword = strtolower(preg_replace("/[^a-z]+/i", "-", $theword));
3 голосов
/ 15 июня 2011
<?php
function sanitize($s) {
    // This RegEx removes any group of non-alphanumeric or dash
    // character and replaces it/them with a dash
    return strtolower(preg_replace('/[^a-z0-9-]+/i', '-', $s));
}

echo sanitize('Some Word') . "\n";
echo sanitize('Some_Word') . "\n";
echo sanitize('Some___Word') . "\n";
echo sanitize('Some     Word') . "\n";
echo sanitize('Some ) # $ ^ Word') . "\n";

Выход:

Some-Word
Some-Word
Some-Word
Some-Word
Some-Word
1 голос
/ 15 июня 2011

Не уверен, почему @Dagon решил оставить комментарий вместо ответа, но вот расширение его ответа.

Функция

php preg_replace позволяет вам заменить что-либо другим.

Вот пример для вашего случая:

$input = "a word 435 (*^(*& HaHa";

$dashesOnly = preg_replace("#[^-a-zA-Z0-9]+#", "-", $input);

print $dashesOnly; // prints a-word-435-HaHa;
1 голос
/ 15 июня 2011

Вы можете попробовать preg_replace: http://php.net/manual/en/function.preg-replace.php

Пример с этой страницы:

<?php
$string = 'April 15, 2003';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = '${1}1,$3';
echo preg_replace($pattern, $replacement, $string);
//April1,2003
?>

Вы можете попробовать поискать "поиск дружественных URL-адресов с помощью PHP"так как есть довольно много документации, пример:

function friendlyURL($string){
$string = preg_replace("`\[.*\]`U","",$string);
$string = preg_replace('`&(amp;)?#?[a-z0-9]+;`i','-',$string);
$string = htmlentities($string, ENT_COMPAT, 'utf-8');
$string = preg_replace( "`&([a-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig|quot|rsquo);`i","\\1", $string );
$string = preg_replace( array("`[^a-z0-9]`i","`[-]+`") , "-", $string);
return strtolower(trim($string, '-'));
}

и использование:

$myFriendlyURL = friendlyURL("Barca rejects FIFA statement on Olympics row");
echo $myFriendlyURL; // will echo barca-rejects-fifa-statement-on-olympics-row

Источник: http://htmlblog.net/seo-friendly-url-in-php/

0 голосов
/ 15 июня 2011

Я нашел несколько интересных решений в сети ... обратите внимание, ни один из них не является моим кодом.Просто скопировано сюда в надежде помочь вам создать пользовательскую функцию для вашего собственного приложения.

Это было скопировано с Chyrp .Должно работать хорошо для ваших нужд!

/**
 * Function: sanitize
 * Returns a sanitized string, typically for URLs.
 *
 * Parameters:
 *     $string - The string to sanitize.
 *     $force_lowercase - Force the string to lowercase?
 *     $anal - If set to *true*, will remove all non-alphanumeric characters.
 */
function sanitize($string, $force_lowercase = true, $anal = false) {
$strip = array("~", "`", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "=", "+", "[", "{", "]",
               "}", "\\", "|", ";", ":", "\"", "'", "&#8216;", "&#8217;", "&#8220;", "&#8221;", "&#8211;", "&#8212;",
               "—", "–", ",", "<", ".", ">", "/", "?");
$clean = trim(str_replace($strip, "", strip_tags($string)));
$clean = preg_replace('/\s+/', "-", $clean);
$clean = ($anal) ? preg_replace("/[^a-zA-Z0-9]/", "", $clean) : $clean ;
return ($force_lowercase) ?
    (function_exists('mb_strtolower')) ?
        mb_strtolower($clean, 'UTF-8') :
        strtolower($clean) :
    $clean;
}

РЕДАКТИРОВАТЬ: еще проще функцию я нашел!Всего несколько строк кода, достаточно понятных.

function slug($z){
    $z = strtolower($z);
    $z = preg_replace('/[^a-z0-9 -]+/', '', $z);
    $z = str_replace(' ', '-', $z);
    return trim($z, '-');
}
0 голосов
/ 15 июня 2011

Вы можете написать этот фрагмент кода с помощью регулярных выражений.

Но я не вижу доступных функций, которые бы помогли вам напрямую заменить "" на "-"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...