13.01.2013, 01:38

[PHP] Usuwanie i zamiana polskich znaków na zwykłe, bez ogonków

Siemka wszystkim po długiej przerwie 🙂

Chciałbym zaprezentować dwa kody, które pozwolą usunąć z naszego ciągu znaków tzw. treści jakiś polskie znaki, a raczej zamienić je na znaki bez ogonków, czyli do wykorzystania podczas tworzenia np. linków lub identyfikatora o danej nazwie dla bazy danych itd.

Po prostu chcesz zmienić polskie znaki na znaki bez ogonków / zwykłe? To dobrze trafiłeś poniżej pokażę ci dwa kody, jeden z nich powinien zadziałać:

$alias = 'ĘÓĄŚŁŻŹĆŃęóąśłżźćń’; //przykładowy tekst

$alias= strtolower($alias);
$alias = str_replace(’ ’, ’-’, $alias);
$alias = str_replace(array(’ą’, 'ć’, 'ę’, 'ł’, 'ń’, 'ó’, 'ś’, 'ź’, 'ż’),
array(’a’, 'c’, 'e’, 'l’, 'n’, 'o’, 's’, 'z’, 'z’), $alias);
$alias = preg_replace(’/[^0-9a-z\-]+/’, ”, $alias);
$alias = preg_replace(’/[\-]+/’, ’-’, $alias);
$alias= trim($alias,’-’);

$alias = str_replace(array(’,’, ’:’, ’;’, ’ ’), array(”, ”, ”, ’-’), $alias);

echo $alias;

i
$alias = 'ĘÓĄŚŁŻŹĆŃęóąśłżźćń’; //przykładowy tekst

$alias= strtolower($alias);
$alias = str_replace(’ ’, ’-’, $alias);

$alias = strtr($alias, 'ęóąśłżźćń’, 'eoaslzzcn’);
$alias = strtr($alias, 'ˇ¦¬±¶Ľ’,’ASZasz’);

$alias = preg_replace(’/[^0-9a-z\-]+/’, ”, $alias);
$alias = preg_replace(’/[\-]+/’, ’-’, $alias);
$alias= trim($alias,’-’);

$alias = strtr($alias, ’ ’,’-’);

echo $alias;

A jeszcze krótkie wyjaśnienie co daje ten fragment:

$alias= strtolower($alias);
$alias = str_replace(’ ’, ’-’, $alias);
$alias = preg_replace(’/[^0-9a-z\-]+/’, ”, $alias);
$alias = preg_replace(’/[\-]+/’, ’-’, $alias);
$alias= trim($alias,’-’);

Ten fragment służy do:
strtolower($alias); – zmiany liter na małe
str_replace(’ ’, ’-’, $alias); – zamienia spację na „-„
preg_replace(’/[^0-9a-z\-]+/’, ”, $alias); – usuwa wszystkie znaki oprócz liter i cyrf
preg_replace(’/[\-]+/’, ’-’, $alias); – zapomniałem, ale chyba chodziło o to że jeśli jest więcej niż jeden „-” obok siebie to zamienia wszystkie za jeden
trim($alias, ’-’); – usuwa puste znaki , coś jak spacje i zamienia je na „-„

Jeśli okaże się, że macie jakiś problem z tymi skryptami dajcie znać na email.

Aktualizacja 5.03.2014 o 13:52

Trzecia wersja:

$tekst = strtolower($tekst);
$tekst = str_replace(array(’ą’, 'ć’, 'ę’, 'ł’, 'ń’, 'ó’, 'ś’, 'ź’, 'ż’), array(’a’, 'c’, 'e’, 'l’, 'n’, 'o’, 's’, 'z’, 'z’), $tekst);
$tekst = trim($tekst,’-’);
$tekst = preg_replace(’/[\-]+/’, ’-’, $tekst);
$tekst = preg_replace(’/[^0-9a-z-]/’, ”, $tekst);
echo $tekst;

Aktualizacja 17.11.2016 o 17:14
Czwarta wersja:

$alias = strtolower($alias);
$alias = str_replace(’ ’, ’-’, $alias);
$alias = preg_replace(’/[^0-9a-ąćęłńóśźż\-]+/’, ”, $alias);

$alias = preg_replace(’/[\-]+/’, ’-’, $alias);
$alias= trim($alias,’-’);
$alias = str_replace(array(’ą’, 'ć’, 'ę’, 'ł’, 'ń’, 'ó’, 'ś’, 'ź’, 'ż’), array(’a’, 'c’, 'e’, 'l’, 'n’, 'o’, 's’, 'z’, 'z’), $alias);
$alias = str_replace(array(’,’, ’:’, ’;’, ’ ’), array(”, ”, ”, ’-’), $alias);
$alias = strtr($alias, ’ ’,’-’);