Как уже упоминалось, str_replace будет делать то, что вы конкретно ищете, но ...
Я бы больше беспокоился о profile.php?user=John' DROP DATABASE--
Не создавайте подобные запросы. КОГДА-ЛИБО. См. SQL-инъекция по одной причине. Взгляните на эту статью , чтобы узнать, как это сделать.
О, и комикс для использования в качестве вспомогательного средства памяти, чтобы подчеркнуть, что вы НИКОГДА не должны этого делать.
РЕДАКТИРОВАТЬ: В ответ на ваш ответ (лучше отредактировать исходный вопрос, чтобы было понятно, что вы уточняете свой вопрос). Если у вас есть пользователь 'Джон Джонсон', хранящийся в базе данных, но вы хотите получить к нему доступ с помощью URL profile.php?user=John_Johnson
, вам нужно отменить замену, которую вы делаете:
$user = str_replace('_', ' ', $_GET['user']);
$user = mysql_escape_string($user);
$query = mysql_query("SELECT * FROM users WHERE username = '$user'");
// finns inte användaren så skriver vi ut ett felmeddelande
if (!mysql_num_rows($query)) exit('<p>The user you are looking for appears to be missing.</p>');
Это займет profile.php?user=John_Johnson
и выдаст запрос sql: SELECT * FROM users WHERE username = 'John Johnson'
Пример кода, на который вы ответили, примет profile.php?user=John Johnson
и выдаст запрос sql: SELECT * FROM users WHERE username = 'John_Johnson'
, который, я подозреваю, противоположен тому, что вы хотите.
Но опять же, я настоятельно рекомендую изучить подготовленные заявления. mysql_escape_string
действительно мера остановки. Все, что вам нужно, это забыть использовать его один раз, и вы открыли свой сайт для взлома.