2010-10-23 2 views
4

Я получаю строки из базы данных, а затем используя строки для создания URL-адреса. Моя проблема заключается в том, что некоторые строки будут содержать символы, такие как <> & {} * общие специальные символы, но строка также может содержать строки. Как бы заменить пробелы черточками и полностью удалить и специальные символы из строк?PHP - манипуляция строками удаляет символьные символы и заменяет пробелы

+0

Это может быть проще в использовании UrlEncode(). Это делает строку безопасной для использования в URL-адресах. – mellowsoon

ответ

3

С str_replace:

$str = str_replace(array(' ', '<', '>', '&', '{', '}', '*'), array('-'), $str); 

Примечание:

Если заменить имеет меньше значения, чем поиск, то пустая строка используется для остальных значений замены.

8

Хранить только буквы и цифры в строке с помощью preg_replace:

$string = preg_replace('/[^a-zA-Z0-9-]/', '', $string); 

Вы можете использовать str_replace заменить пространство -

$string = str_replace (" ", "-", $string); 

Посмотрите на следующей статье:

+0

Iff вы предполагаете, что за пределами A-Z нет алфавитных символов, это сработает; в зависимости от ваших обстоятельств, это может быть или не быть слишком наивным предположением. – Piskvor

1
str_replace(' ','-',$string); 

буквенно-цифровой:

$output = preg_replace("/[^A-Za-z0-9]/","",$input); 

если вы хотите сохранить символы:

htmlspecialchars($string); 
2

1) Заменить диакритические с Iconv
2) Заменить удобство письма символов с пустой строкой
3) Заменить пробела с тиром
4) Обрезать строку для тира символов (вы также можете обрезать строку до того, манипуляции)

Например, если вы используете UTF-8 кодировке:

setlocale(LC_ALL, 'fr_CA.utf8'); 
$str = "%#dŝdèàâ.,d s#$4.sèdf;21df"; 

$str = iconv("UTF-8", "ASCII//TRANSLIT", $str); // "%#dsdeaa.,d s#$4.sedf;21df" 
$str = preg_replace("`[^\w]+`", "", $str); // "dsdeaad s4sedf21df" 
$str = str_replace(" ", "-", $str); // "dsdeaad-s4sedf21df" 
$str = trim($str, '-'); // "dsdeaad-s4sedf21df" 
Смежные вопросы