Skocz do zawartości

[PHP]Usuwanie/zamienianie polskich znaków


Ptaq

Rekomendowane odpowiedzi

Potrzebuje jakoś zamieniać polskie znaki na ich odpowiedniki bez 'ogonków'.

Testowałem zarówno funkcje

htmlspecialchars

oraz taki kod:

function toPermalink($string)
{


	$unPretty = array('/ä/', '/ö/', '/ü/', '/Ä/', '/Ö/', '/Ü/', '/ß/', 
						'/ą/', '/Ą/', '/ć/', '/Ć/', '/ę/', '/Ę/', '/ł/', '/Ł/' ,'/ń/', '/Ń/', '/ó/', '/Ó/', '/ś/', '/Ś/', '/ź/', '/Ź/', '/ż/', '/Ż/',
						'/Š/','/Ž/','/š/','/ž/','/Ÿ/','/Ŕ/','/Á/','/Â/','/Ă/','/Ä/','/Ĺ/','/Ç/','/Č/','/É/','/Ę/','/Ë/','/Ě/','/Í/','/Î/','/Ď/','/Ń/',
						'/Ň/','/Ó/','/Ô/','/Ő/','/Ö/','/Ř/','/Ů/','/Ú/','/Ű/','/Ü/','/Ý/','/ŕ/','/á/','/â/','/ă/','/ä/','/ĺ/','/ç/','/č/','/é/','/ę/',
						'/ë/','/ě/','/í/','/î/','/ď/','/ń/','/ň/','/ó/','/ô/','/ő/','/ö/','/ř/','/ů/','/ú/','/ű/','/ü/','/ý/','/˙/',
						'/Ţ/','/ţ/','/Đ/','/đ/','/ß/','/Œ/','/œ/','/Ć/','/ć/','/ľ/');

	$pretty   = array('ae', 'oe', 'ue', 'Ae', 'Oe', 'Ue', 'ss', 
						'a', 'A', 'c', 'C', 'e', 'E', 'l', 'L', 'n', 'N', 'o', 'O', 's', 'S', 'z', 'Z', 'z', 'Z',
						'S','Z','s','z','Y','A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','N',
						'O','O','O','O','O','O','U','U','U','U','Y','a','a','a','a','a','a','c','e','e','e',
						'e','i','i','i','i','n','o','o','o','o','o','o','u','u','u','u','y','y',
						'TH','th','DH','dh','ss','OE','oe','AE','ae','u');

	$permalink = strtolower(preg_replace($unPretty, $pretty, $string));
	return  str_replace(" ", "-", preg_replace("/[^a-zA-Z0-9 ]/", "", $permalink) );

}

jednak żadne z tych rozwiązań nie potrafi zamienić "ó" - ten znak zawsze jest "ó" - pozostałe się ładnie zamieniają.

https://www.punktseo.pl/darmowe-bonusy/ << rozdaje: kody do katalogów firm, kody rabatowe, szablony ZennoPoster ! |---| Moje strony: https://www.s90.pl/pozycjonowanie/ | https://www.seo-stat.pl - zapraszam.                                                                                                                                                                                          

seo-stat-logo.png

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 39
  • Dodano
  • Ostatniej odpowiedzi

Pozwole sobie odpisać - u mnie zadziałało przed chwilą:

<?php
  $tekst = 'Zażółć gęślą jaźń';
  $wynik = strtr($tekst, 'ĘÓĄŚŁŻŹĆŃęóąśłżźćń', 'EOASLZZCNeoaslzzcn');
  echo($wynik);
?>

Moze komus sie przyda :D

EDIT:

a wie ktoś czemu jak zamienie to na funkcje:

function zamiana($tekst)
  {
  $wynik = strtr($tekst, 'ĘÓĄŚŁŻŹĆŃęóąśłżźćń', 'EOASLZZCNeoaslzzcn');
  echo($tekst);
  }
  zamiana(śćółóóółłłł);

to znów "ó" nie zamienia :) ?

https://www.punktseo.pl/darmowe-bonusy/ << rozdaje: kody do katalogów firm, kody rabatowe, szablony ZennoPoster ! |---| Moje strony: https://www.s90.pl/pozycjonowanie/ | https://www.seo-stat.pl - zapraszam.                                                                                                                                                                                          

seo-stat-logo.png

 

Odnośnik do komentarza
Udostępnij na innych stronach

Ale wstyd taki błąd...

ale ważne ze już śmiga :)

https://www.punktseo.pl/darmowe-bonusy/ << rozdaje: kody do katalogów firm, kody rabatowe, szablony ZennoPoster ! |---| Moje strony: https://www.s90.pl/pozycjonowanie/ | https://www.seo-stat.pl - zapraszam.                                                                                                                                                                                          

seo-stat-logo.png

 

Odnośnik do komentarza
Udostępnij na innych stronach

W notatkach opery jeszcze mam takie coś :) Może się przydać... znalezione gdzieś w sieci...

function plCharset($string) {

$string = strtolower($string);
$polskie = array(',', ' - ',' ','ę', 'Ę', 'ó', 'Ó', 'Ą', 'ą', 'Ś', 's', 'ł', 'Ł', 'ż', 'Ż', 'Ź', 'ź', 'ć', 'Ć', 'ń', 'Ń','-',"'","/","?", '"', ":", 'ś', '!','.', '&', '&', '#', ';', '[',']','domena.pl', '(', ')', '`', '%', '”', '„', '…');
$miedzyn = array('-','-','-','e', 'e', 'o', 'o', 'a', 'a', 's', 's', 'l', 'l', 'z', 'z', 'z', 'z', 'c', 'c', 'n', 'n','-',"","","","","",'s','','', '', '', '', '', '', '', '', '', '', '', '', '');
$string = str_replace($polskie, $miedzyn, $string);

// usuń wszytko co jest niedozwolonym znakiem
$string = preg_replace('/[^0-9a-z\-]+/', '', $string);

// zredukuj liczbę myślników do jednego obok siebie
$string = preg_replace('/[\-]+/', '-', $string);

// usuwamy możliwe myślniki na początku i końcu
$string = trim($string, '-');

$string = stripslashes($string);

// na wszelki wypadek
$string = urlencode($string);

return $string;
}

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 miesiące temu...

Dopisze swoje rozwiązanie:

function przyjazny_string($string){
  $string = strtr($string, 'ĘęÓ󥹌śŁłŹźŻżĆćŃń', 'EeOoAaSsLlZzZzCcNn');
  $string = strtr($string, 'ˇ¦¬±¶Ľ','ASZasz');
  $string = preg_replace("'[[:punct:][:space:]]'",'-',$string);
  $string = strtolower($string);
  $znaki = '-'; 
  $powtorzen = 1;
  $string = preg_replace_callback('#(['.$znaki.'])\1{'.$powtorzen.',}#', create_function('$a', 'return substr($a[0], 0,'.$powtorzen.');'), $string);
  return $string;
}

Funkcja bez problemu zamienia tekst typu "Śmiecie & Rupiecie" na "smiecie-ropiecie"

Edyta: Specjalnie napisałem przez "ó" żeby zobrazować działanie, ale jakiś czujny admin albo wredna autocenzura poprawiła :D

Odnośnik do komentarza
Udostępnij na innych stronach

To i ja dam swoje :D

class hUrls
{
private $a = array( 'Ę', 'Ó', 'Ą', 'Ś', 'Ł', 'Ż', 'Ź', 'Ć', 'Ń', 'ę', 'ó', 'ą', 
			'ś', 'ł', 'ż', 'ź', 'ć', 'ń' );
private $b = array( 'E', 'O', 'A', 'S', 'L', 'Z', 'Z', 'C', 'N', 'e', 'o', 'a', 
			's', 'l', 'z', 'z', 'c', 'n' );

public function Parse( $string )
{
	$string = str_replace( $this -> a, $this -> b, $string );
	$string = preg_replace( '#[^a-z0-9]#is', ' ', $string );
	$string = trim( $string );
	$string = preg_replace( '#\s{2,}#', ' ', $string );
	$string = str_replace( ' ', '-', $string );
	return $string;
}
}

stopka usunieta z wpoodu wirusa na stronie docelowej

Odnośnik do komentarza
Udostępnij na innych stronach

To jeszcze niech ktoś napisze taką wersję która bedzie łykała PL-znaki w dowolnym kodowaniu :)

Przez dowolne kodowanie rozumiem: UTF8 ISO8859-2(latin2) WIN1250(cp1250)

Niech polskie znaki bedą zdefiniowane nie jako STRINGI ale jako liczby w zapisie szesnastkowym , podczas kopiowania i wklejania z takim kodem nic sie nie stanie :)

A jak sie kopiuje i wkleja z Pl-znakami to czasmi dzieją sie różne rzeczy :D Już nie wspomne o tym ze trzeba być swiadomym w jakim kodowaniu sie aktualnie pracuje.

Jak bedą zapisy szesnastkowe bedzie to bardziej uniwersalne !!! [mniej osób będzie pisało że im nie działa ]

Odnośnik do komentarza
Udostępnij na innych stronach

<?php

 function win2utf(){
  $tabela = Array(
"xb9" => "xc4x85", "xa5" => "xc4x84", "xe6" => "xc4x87", "xc6" => "xc4x86",
"xea" => "xc4x99", "xca" => "xc4x98", "xb3" => "xc5x82", "xa3" => "xc5x81",
"xf3" => "xc3xb3", "xd3" => "xc3x93", "x9c" => "xc5x9b", "x8c" => "xc5x9a",
"x9f" => "xc5xbc", "xaf" => "xc5xbb", "xbf" => "xc5xba", "xac" => "xc5xb9",
"xf1" => "xc5x84", "xd1" => "xc5x83");
  return $tabela;
 }

 function iso2utf(){
  $tabela = Array(
"xb1" => "xc4x85", "xa1" => "xc4x84", "xe6" => "xc4x87", "xc6" => "xc4x86",
"xea" => "xc4x99", "xca" => "xc4x98", "xb3" => "xc5x82", "xa3" => "xc5x81",
"xf3" => "xc3xb3", "xd3" => "xc3x93", "xb6" => "xc5x9b", "xa6" => "xc5x9a",
"xbc" => "xc5xbc", "xac" => "xc5xbb", "xbf" => "xc5xba", "xaf" => "xc5xb9",
"xf1" => "xc5x84", "xd1" => "xc5x83");
  return $tabela;
 }

 function ISO88592_2_UTF8($tekst){
  return strtr($tekst, iso2utf());
 }

 function UTF8_2_ISO88592($tekst){
  return strtr($tekst, array_flip(iso2utf()));
 }

 function WIN1250_2_UTF8($tekst){
  return strtr($tekst, win2utf());
 }

 function UTF8_2_WIN1250($tekst){
  return strtr($tekst, array_flip(win2utf()));
 }

 function ISO88592_2_WIN1250($tekst){
  return strtr($tekst, "xa1xa6xacxb1xb6xbc", "xa5x8cx8fxb9x9cx9f");
 }

 function WIN1250_2_ISO88592($tekst){
  return strtr($tekst, "xa5x8cx8fxb9x9cx9f", "xa1xa6xacxb1xb6xbc");

 }
?>

źródło: 4programmers.net

Mar.

Polecam katalog SeoPark.pl, katalog AK47 (5 lata w sieci) ...oraz Wirtualne-miasta.eu
"Dopóki nie skorzystałem z Internetu, nie wiedziałem, że na świecie jest tylu idiotów" - Stanisław Lem

Odnośnik do komentarza
Udostępnij na innych stronach

<?
/*
 Funkcja do usuwania polskich znakow z tekstu o dowolnym kodowaniu
 Autor: Marius Maximus
 Inspiracja:  https://4programmers.net/PHP/FAQ/Jak_zmieni%C4%87_kodowanie_tekstu_nie_maj%C4%85c_dost%C4%99pu_do_funkcji_iconv_%5C

 Sposob uzycia:
 $zmienna = _no_pl("jakiś tekst z PL-znakami np. ŻÓŁĆ");

*/
function _no_pl($tekst)
{
  $tabela = Array(
  //WIN
"xb9" => "a", "xa5" => "A", "xe6" => "c", "xc6" => "C",
"xea" => "e", "xca" => "E", "xb3" => "l", "xa3" => "L",
"xf3" => "o", "xd3" => "O", "x9c" => "s", "x8c" => "S",
"x9f" => "z", "xaf" => "Z", "xbf" => "z", "xac" => "Z",
"xf1" => "n", "xd1" => "N",
  //UTF
"xc4x85" => "a", "xc4x84" => "A", "xc4x87" => "c", "xc4x86" => "C",
"xc4x99" => "e", "xc4x98" => "E", "xc5x82" => "l", "xc5x81" => "L",
"xc3xb3" => "o", "xc3x93" => "O", "xc5x9b" => "s", "xc5x9a" => "S",
"xc5xbc" => "z", "xc5xbb" => "Z", "xc5xba" => "z", "xc5xb9" => "Z",
"xc5x84" => "n", "xc5x83" => "N",
  //ISO
"xb1" => "a", "xa1" => "A", "xe6" => "c", "xc6" => "C",
"xea" => "e", "xca" => "E", "xb3" => "l", "xa3" => "L",
"xf3" => "o", "xd3" => "O", "xb6" => "s", "xa6" => "S",
"xbc" => "z", "xac" => "Z", "xbf" => "z", "xaf" => "Z",
"xf1" => "n", "xd1" => "N");

  return strtr($tekst,$tabela);
}
?>

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 miesiące temu...

Kurcze a u mnie ta funkcja Maximusa Mariusa kompletnie nic nie zmienia. Ani przykłady ze skryptu ani nic co sam wklepie. tak jak by te kody "xb9" nic dla niego nie znaczyły jak zmienię na byle co to działa. Odpalam testowo na localhoscie może ktoś wie o co chodzi ?

Odnośnik do komentarza
Udostępnij na innych stronach

xb9 to zapis szesnastkowy

xB9 = ord(185)

popatrzył bym jakims edytorem który pokazuje zapis szesnastkowy czy rzeczywiście w Twoim tekście są te znaki tak zapisane .

A sprawdz to, bo widzę ze ukośniki "wcięło" :)

<?
/*
 Funkcja do usuwania polskich znakow z tekstu o dowolnym kodowaniu
 Autor: Marius Ma\ximus
 Inspiracja:  https://4programmers.net/PHP/FAQ/Jak_zmieni%C4%87_kodowanie_tekstu_nie_maj%C4%85c_dost%C4%99pu_do_funkcji_iconv_%5C

 Sposob uzycia:
 $zmienna = _no_pl("jakiś tekst z PL-znakami np. ŻÓŁĆ");

*/
function _no_pl($tekst)
{
  $tabela = Array(
  //WIN
"\xb9" => "a", "\xa5" => "A", "\xe6" => "c", "\xc6" => "C",
"\xea" => "e", "\xca" => "E", "\xb3" => "l", "\xa3" => "L",
"\xf3" => "o", "\xd3" => "O", "\x9c" => "s", "\x8c" => "S",
"\x9f" => "z", "\xaf" => "Z", "\xbf" => "z", "\xac" => "Z",
"\xf1" => "n", "\xd1" => "N",
  //UTF
"\xc4\x85" => "a", "\xc4\x84" => "A", "\xc4\x87" => "c", "\xc4\x86" => "C",
"\xc4\x99" => "e", "\xc4\x98" => "E", "\xc5\x82" => "l", "\xc5\x81" => "L",
"\xc3\xb3" => "o", "\xc3\x93" => "O", "\xc5\x9b" => "s", "\xc5\x9a" => "S",
"\xc5\xbc" => "z", "\xc5\xbb" => "Z", "\xc5\xba" => "z", "\xc5\xb9" => "Z",
"\xc5\x84" => "n", "\xc5\x83" => "N",
  //ISO
"\xb1" => "a", "\xa1" => "A", "\xe6" => "c", "\xc6" => "C",
"\xea" => "e", "\xca" => "E", "\xb3" => "l", "\xa3" => "L",
"\xf3" => "o", "\xd3" => "O", "\xb6" => "s", "\xa6" => "S",
"\xbc" => "z", "\xac" => "Z", "\xbf" => "z", "\xaf" => "Z",
"\xf1" => "n", "\xd1" => "N");

  return strtr($tekst,$tabela);
}
?>

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