Skocz do zawartości

zamiana ąęść, itd w linku na aesc


pandha

Rekomendowane odpowiedzi

witam. mam kod

function RemoveBadURLChars($str){
   $str= preg_replace("/ł/", "l", $str);
   $str= preg_replace("/ó/", "o", $str);

itd

   $str= preg_replace("/[^0-9a-zA-Z]+/", "-", $str);
   return $str;  }
{
return preg_replace("/[^0-9a-zA-Z]+/", "_", $str);
}

dlaczego mi nie zamienia na normalne literki? jak wpisze np ("/u/", "uuuuuuu", $str); to mi zamieni u na uuuuu.

dzieki za pomoc

Nauka angielskiego online - https://www.e-angielski.com

Odnośnik do komentarza
Udostępnij na innych stronach

Zasadnicze pytanie: to pod jakim kodowaniem ma to działać?

Tu masz dla iso-8859-2

function RemoveBadURLChars($str){
$iso2_iso = array(
"\xb1" => "a", 
"\xa1" => "A",
"\xe6" => "c",
"\xc6" => "C",
"\xea" => "e",
"\xca" => "E",
"\xb3" => "l",
"\xa3" => "L",
"\xf1" => "n",
"\xd1" => "N",
"\xf3" => "o",
"\xd3" => "O",
"\xb6" => "s",
"\xa6" => "S",
"\xbc" => "z",
"\xac" => "Z",
"\xbf" => "z",
"\xaf" => "Z"
);
return strtr($str,$iso2_iso);
}

.

Odnośnik do komentarza
Udostępnij na innych stronach

dla utf-8

function RemoveBadURLChars($str){
$utf8_iso = array(
"\xc4\x85" => "a",
"\xc4\x84" => "A",
"\xc4\x87" => "c",
"\xc4\x86" => "C",
"\xc4\x99" => "e",
"\xc4\x98" => "E",
"\xc5\x82" => "l",
"\xc5\x81" => "L",
"\xc5\x84" => "n",
"\xc5\x83" => "N",
"\xc3\xb3" => "o",
"\xc3\x93" => "O",
"\xc5\x9b" => "s",
"\xc5\x9a" => "S",
"\xc5\xbc" => "z",
"\xc5\xbb" => "Z",
"\xc5\xba" => "z",
"\xc5\xb9" => "Z"
);
return strtr($str,$utf8_iso);
}

.

Odnośnik do komentarza
Udostępnij na innych stronach

Dzieki, juz wiem dlaczego mi nie dzialalo, nawet jak wpisalem

$str= preg_replace("\xc4\x85", "a", $str);

bo musialo byc

$str= preg_replace("/\xc4\x85/", "a", $str);

yavaho, dzieki bardzo, twoj sposob jest znacznie prostszy i dziala :D thx

Nauka angielskiego online - https://www.e-angielski.com

Odnośnik do komentarza
Udostępnij na innych stronach

Dlaczego używasz wyrażeń regularnych? Przecież zwykłe znajdź->zamień dzaiła X razy szybciej. Szkoda marnować procesor na serwerze. Funkcja, którą podał @yavaho w swoim ostatnim poście będzie działała pewnie z 50 razy szybciej niż Twój preg_replace.

Sprawdź liderów systemów wymiany linków:

linkme.pl (stały), gotlink.pl (rotacyjny)

alexain.jpgalexaol.jpgalexaat.jpg

Odnośnik do komentarza
Udostępnij na innych stronach

Dlaczego używasz wyrażeń regularnych? Przecież zwykłe znajdź->zamień dzaiła X razy szybciej. Szkoda marnować procesor na serwerze. Funkcja, którą podał @yavaho w swoim ostatnim poście będzie działała pewnie z 50 razy szybciej niż Twój preg_replace.

spoko, uzylem funkcji yavaho, tyle ze teraz nie wiem czemu jak w linku jest slowo spacja slowo to mi powstaje slowo%slowo.... domysla sie ze musze dodac wiec zamiane spacji czyli kod x20 na np -, tylko co oznacza xc4, xc5 w przykladzie wyzej? zeby nie bylo, szukalem w google ale nie kumam wciaz tego.

Nauka angielskiego online - https://www.e-angielski.com

Odnośnik do komentarza
Udostępnij na innych stronach

Jeżeli budujesz link (a chcesz aby ładnie wyglądał) to musisz to trochę inaczej zrobić.

Musisz zamienić wszystkie znaki utf-8 (nie tylko polskie) na ich proste odpowiedniki, a pozostałe znaki ktore nie wchodza w sklad alfabetu zamienic na jeden np"-"

W przypadku utf-8 aby zrobić taki link to chyba najprościej zrobic to tak:

Zamienic tekst na nasze kodowanie funkcją iconv("UTF-8","ISO-8859-2",$txt)

Potem zamienić wszystkie pozostałe znaki na jakiś jeden np "-"

Pod warunkiem że zależy Ci na ładnym linku a nie zależy ci na tym aby w zmiennej $_GET przekazać dokładnie oryginalny tekst.

Co oznacza xc4, xc5 ?

W utf-8 znaki diakrytyczne zapisane sa w 2 bajtach

czyli np "ą" zapisane jest tak: "Ä…"

.

Odnośnik do komentarza
Udostępnij na innych stronach

cos takiego moze byc?

function RemoveBadURLChars($str){
$utf8_iso = array(
"\xc4\x85" => "a",
"\xc4\x84" => "A",
"\xc4\x87" => "c",
"\xc4\x86" => "C",
"\xc4\x99" => "e",
"\xc4\x98" => "E",
"\xc5\x82" => "l",
"\xc5\x81" => "L",
"\xc5\x84" => "n",
"\xc5\x83" => "N",
"\xc3\xb3" => "o",
"\xc3\x93" => "O",
"\xc5\x9b" => "s",
"\xc5\x9a" => "S",
"\xc5\xbc" => "z",
"\xc5\xbb" => "Z",
"\xc5\xba" => "z",
"\xc5\xb9" => "Z"
);
return strtr($str,$utf8_iso);
}
{
return preg_replace("/[^0-9a-zA-Z]+/", "_", $str);
}

ps. pamietaj ze gadasz z mocno poczatkujacym w php.... ;)

Nauka angielskiego online - https://www.e-angielski.com

Odnośnik do komentarza
Udostępnij na innych stronach

Najpierw musisz zamienić wszystkie znaki utf-8 na ISO-8859-2 lub ostatecznie na ISO-8859-1 (nie wystarczy zamienić tylko te polskie) bo inaczej nie bedzie to działać poprawnie, potem możesz zastosować taki filtr jak ponizej aby link ładnie wyglądał.

  $txt= strtolower($txt); // zamienia na male
 $txt= preg_replace('/[^0-9a-z\-]+/', '-', $txt); // zamień wszytko co jest innym znakiem
 $txt= preg_replace('/[\-]+/', '-', $txt);  // redukcja myslników
 $txt= trim($txt,'-'); //obcina na koncu i na pocztku myslniki

edit

Juz widze że to jeszcze wszystkiego nie wyfiltruje ;)

Jeszcze wcześniej nalezy pozamieniać takie znaki jak enter, tab "\r\n" , "\t"

I jeszcze np różne encje np takie: "&"

.

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności