2011-01-21 8 views
15

Mam problem z zastąpieniem znaku "+" zakodowanym łańcuchem "% 2B". Jak mogę to zrobić?Jak mogę zamienić znak plus "+" na odpowiadające mu kodowanie adresu URL "% 2B"?

To co próbowałem:

tekst wprowadzony w polu tekstowym:

plus(+) 

Potem urlencode napisu:

$string = urlencode($string); 

String teraz wygląda następująco:

plus%28+%29 

Chcę mieć znak „+” urlencoded, albo kiedy urldecode() dane do wyświetlenia w przeglądarce I skończyć z:

plus() 

ponieważ urldecode() interpretuje „+”, aby mieć przestrzeń.

Próbowałem za pomocą str_replace PHP(), ale Wciąż otrzymuję "null" zwracane jako wartość "$ new_string":

$new_string = str_replace('+', '%2B', $string); 

jakieś pomysły?

Z góry dziękuję!

+1

Użycie 'urlencode ($ string)' echos 'plus% 28% 2B% 29' dla mnie. –

Odpowiedz

33

To dziwne. Kiedy używam urlencode na plus(+) otrzymam plus%28%2B%29. Upewnij się, że używasz go poprawnie.

Możesz także spróbować rawurlencode. Będzie kodować spacje jako %20 zamiast +.

+10

++ Z komentarzy na stronie podręcznika PHP (http://php.net/manual/en/function.urlencode.php): "Nie używaj funkcji urlencode() lub urldecode(), jeśli tekst zawiera adres e-mail , ponieważ niszczy znak "+", doskonale działający znak adresu e-mail, o ile nie masz pewności, że nie będziesz kodować adresów e-mail i potrzebujesz czytelności zapewnionej przez niestandardowe "+" użycie, zamiast tego zawsze używaj użyj rawurlencode() lub rawurldecode(). " – John

Powiązane problemy