2015-04-25 2 views
1

у меня есть веб-страницу, которая включает в себя гиперссылку следующим образом:preg_replace возвращается в PHP обнулить при замене подчеркивания пробелами

$name = "Hello World"; 
echo "<a href='page.php?name='". preg_replace(" ", "_", $name) "'> bla bla </a>" 

Это порождает следующую ссылку: успешно

...page.php?name=Hello_World 

в моей page.php Я пытаюсь повернуть вспять операцию:

if($_SERVER[REQUEST_METHOD] == "GET"){ 
$name = $_GET['name']; 
//testing if the problem is with GET 
echo $name; 
//now here's the problem: 
$string = preg_replace("_", " ", $name); 
echo $string; 
} 

имя $ echoes правильно, но строка $ al способы обнулить Я перепробовал все возможные комбинации, как ~ ~ и//и [_] и \ s и используя $ _GET прямо как:

preg_replace("_", " ", $_GET['name']); 

ни один из них не работал. Эта проблема сожгла большую часть моего дня. Любая помощь приветствуется.

+0

'preg_replace ("# _ #", "", $ имя);' – adeneo

ответ

1

preg_replace принимает регулярное выражение как его первые аргументы. Ни " ", ни "_" являются действительными регулярными выражениями.

В этом случае вы можете использовать str_replace.

+0

Это не полный стакан чая! Больше. OP имеет больше ошибок в своем коде! – Rizier123

+0

Я не вижу никаких пропущенных котировок вокруг 'REQUEST_METHOD', и я думаю, что просто генерирует предупреждение. В первом фрагменте есть проблема с потенциально отсутствующей кодировкой url + html, но я считаю, что это выходит за рамки этого вопроса. – Halcyon

+0

1. В первом блоке кода из OP смотрите одиночные кавычки, где они размещены 2. Также конкатенация точек (точек)! (3. И точка с запятой, которой нет в конце строки) 4. Отсутствующие кавычки для 'REQUEST_METHOD' – Rizier123

-2

вы можете создать функцию, как sefurl

function makesefurl($url=''){ 
$s=trim($url); 
$tr = array('ş','Ş','ı','I','İ','ğ','Ğ','ü','Ü','ö','Ö','Ç','ç','(',')','/',':',','); 

$eng = array('s','s','i','i','i','g','g','u','u','o','o','c','c','','','-','-',''); 

$s = str_replace($tr,$eng,$s); 



$s = preg_replace('/&amp;amp;amp;amp;amp;amp;amp;amp;amp;.+?;/', '', $s); 

$s = preg_replace('/\s+/', '-', $s); 

$s = preg_replace('|-+|', '-', $s); 

$s = preg_replace('/#/', '', $s); 

$s = str_replace('.', '.', $s); 

$s = trim($s, '-'); 

$s = htmlspecialchars(strip_tags(urldecode(addslashes(stripslashes(stripslashes(trim(htmlspecialchars_decode($s)))))))); 
    } 
    echo "<a href='page.php?name='". makesefurl($name) "'> bla bla </a>"; 

и чем вы можете преобразовать его раньше функции makesefurl все, что нужно, чтобы создать другой functin как декодер или кодер HTML команды

+0

Если вы хотите кодировать параметры URL, используйте 'urlencode'. Ваша реализация 'makeefurl' не распространяется на все потенциальные случаи. – Halcyon

+0

Я отредактировал сообщение. Я просто хотел привести пример для использования функции. он использовал только одно preg_replace –

+0

. Я вижу ваше редактирование, и теперь ваша функция выполняет две вещи: транслитерацию (заменяет специальные символы их базовым ascii-аналогом) и очень странную кодировку с потерями html. Вам по-прежнему не хватает безопасного кодирования URL.Вот как я его реализую: 'html_specialchars (urlencode (slugify ($ name)))' где 'slugify' транслитерация. Однако наиболее вопиющая проблема заключается в том, что ваша реализация по-прежнему не охватывает все возможные случаи и может создавать небезопасные URL-адреса. Как строка '' 'abc "'. – Halcyon

1

Синтаксис preg_replace неверен как указано на @Halcyon следующее правильно:

$string = preg_replace('/_/', ' ', $name); 

Но для такого простого поиска/замены вы можете использовать str_replace вместо:

$string = str_replace("_", " ", $name); 
echo $string; 
Смежные вопросы