Jump to content
Ptaq

[PHP]Usuwanie/zamienianie polskich znaków

Recommended Posts

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ą.


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

seo-stat-logo.png

 

Share this post


Link to post
Share on other sites

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 :) ?

Edited by Ptaq

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

seo-stat-logo.png

 

Share this post


Link to post
Share on other sites

Zmiast echo($tekst); ma być echo($wynik);

Zamiast zamiana(śćółóóółłłł); ma być zamiana('śćółóóółłłł');


.

Share this post


Link to post
Share on other sites

Ale wstyd taki błąd...

ale ważne ze już śmiga :)


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

seo-stat-logo.png

 

Share this post


Link to post
Share on other sites

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;
}

Share this post


Link to post
Share on other sites

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

Edited by Pilsener

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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 ]

Edited by Maximus Marius

Share this post


Link to post
Share on other sites

<?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.

Edited by 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

Share this post


Link to post
Share on other sites
<?
/*
 Funkcja do usuwania polskich znakow z tekstu o dowolnym kodowaniu
 Autor: Marius Maximus
 Inspiracja:  http://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);
}
?>

Edited by Maximus Marius

Share this post


Link to post
Share on other sites

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 ?

Share this post


Link to post
Share on other sites

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:  http://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);
}
?>

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Terms of Use Privacy Policy