Замена амперсанда на слово и в URL с использованием существующего str_replace

Мне нужно заменить амперсанд (&) словом and в URL-адресах, и я уже заменяю пробелы дефисами, используя php str_replace, как показано ниже: -

<?php echo strtolower(str_replace(' ', '-', $value)) ?>

Могу ли я изменить это, чтобы добавить замену амперсандов, возможно, используя массив?


person zigojacko    schedule 11.07.2014    source источник
comment
Вы хотите выполнить обе замены в одном операторе или...?   -  person ʰᵈˑ    schedule 11.07.2014
comment
Да пожалуйста, в идеале. Это то, что я изо всех сил пытался найти пример в Интернете до сих пор.   -  person zigojacko    schedule 11.07.2014
comment
Я добавил ответ, чтобы удовлетворить эту потребность :)   -  person ʰᵈˑ    schedule 11.07.2014


Ответы (3)


Чтобы заменить обе строки в одном операторе, сделайте следующее;

<?php

$find = array(" ", "&");
$replace = array("-", "and");

$string = "Hello I am a man & I have a dog";

echo str_replace($find, $replace, $string); //Output: Hello-I-am-a-man-and-I-have-a-dog

http://codepad.org/nGj26mNc

Более элегантным способом было бы иметь один ассоциативный массив. (http://codepad.org/OgogWK5l)

<?php

$findAndReplace = array(" " => "-", "&" => "and");

$string = "Hello I am a man & I have a dog";

echo str_replace(array_keys($findAndReplace), array_values($findAndReplace), $string);
person ʰᵈˑ    schedule 11.07.2014
comment
Это именно то, что я пытался сделать - просто не понял синтаксиса - круто, спасибо @hd. - person zigojacko; 11.07.2014

Ответ на ваш вопрос «если вы можете использовать массив» - да. Вы должны прочитать документацию здесь: http://php.net/manual/en/function.str-replace.php

Кроме того, если вы просто хотите закодировать URL-адрес, попробуйте использовать: http://in1.php.net/manual/en/function.urlencode.php или http://in1.php.net/manual/en/function.htmlentities.php

согласно вашему требованию.

person Sumit Gupta    schedule 11.07.2014
comment
Я уже просматриваю документы str_preplace, но не смог найти пример того, что я пытаюсь сделать. Это только когда я написал здесь. Это все хорошо и полезно размещать ссылки на документацию, но я сначала попробую это, прежде чем публиковать здесь. - person zigojacko; 11.07.2014
comment
@zigojacko ваш вопрос никогда не подскажет, если вы ищете документацию и не нашли решения. Однако, если вы посмотрите пример № 2 в документации, он показывает, как мы можем использовать функцию замены массива внутри функции. :) Итак, теперь вы понимаете, почему я публикую URL. Чтение - лучший учитель... - person Sumit Gupta; 11.07.2014
comment
Я согласен, это так - я пробовал эти примеры, но не мог заставить их работать - возможно, мне следовало объяснить это в моем первоначальном вопросе. Спасибо. - person zigojacko; 11.07.2014

вместо того, чтобы заменять амперсанд словом, вы можете кодировать его с помощью функции encodeURIComponent().

Проверьте это Кодирование URL-адресов — проблема с амперсандом

person rack_nilesh    schedule 11.07.2014
comment
Но URL-адрес уже существует со словом «и». Моя строка похожа на one & two, а URL-адрес, который мне нужно сопоставить, — one-and-two. - person zigojacko; 11.07.2014