Замяна на амперсанд с думата и в 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 в документацията, той показва как можем да използваме Array Replace в рамките на функцията. :) така че сега разбирате защо публикувам 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