Zdravím, potřebuji funkci která z jakéhokoliv řetězce odstraní všechny znaky typu /\{@)#... dále pak všechna diaktrická písmena převede na bez diaktriky, odstraní mezery a velká písmena převede na malá. Vstupem tedy může být cokoliv, výstupem pouze znaky a-z. Řešil bych to nejspíš forem a IFem či funkcí preg_match(). Nebo je dostupná již kompletní funkce?
Fórum › PHP
řetězec - odstranění nečitelných znaků
![](img/forum_vlakno_help_vyreseno.png)
#1 Pavelv
Zkus tohle:
<?php
setlocale(LC_CTYPE, 'cs_CZ');
$str = "Příšerný skřivan tvrdí, že 5×4=42. Je to vůl.";
$sanit = preg_replace('/[^a-z]/', '',
iconv('UTF-8', 'ASCII//TRANSLIT', mb_strtolower($str, 'UTF-8')));
echo $sanit;
jj, tam je treba mit nebo nastavit spravne znakove sady pro vstup-vystup.
- soubor utf
- text utf
- header utf (http://php.vrana.cz/…ni-znaku.php)
- a tez tusim mb_internal_encoding('UTF-8') (mb_detect_order)Pokud mas tedy nektere z nich jine, tak jej musis nastavit na takove, jake mas. Nemuzes ocekavat, ze ti win-1250 dokaze zobrazit nebo zpracovat spravne utf text a pod.
#6 Kit
Je to možné, ale nejradši bych si vytvořil funkci nezávislo na jazykové sadě. Něco univerzálnějšího. Zkoušel jsem to přes switch, ale tomu se nelíbí písmena v parametrech:
$old = 'Všelijaké znaky, text_a čísla#23432'; $old = strtolower($old) $new = ''; for($i=0;$i<strlen($old);$i++){ switch($old[$i]){ case 'ě': case 'Ě': $new .= 'e'; break; case 'š': case 'Š': $new .= 's'; break; ... case 'a': case 'b': case 'c': ... $new .= $old[$i]
break; } }
Na php.net pro funkc str_replace bys nasel v komentarich od uzivatelu funkce vyuzivajici cisla znaku jestli ti nevyhovuji znaky. (v tech prikladech je to trosku na pikacu, protoze str_replace umi pracovat s array a neni treba pro kazdy znak spoustet extra str_replace) Lepsi je pouzit ale mb_ funkce.
chr(153) nebo "\x9d"
Znaky s diakritikou musi mit spravne nastavene kodovani v souboru. V default 8-bit kodovani ma jina kodova sada pro stejne cislo jiny znak. Obavam se, ze tva univerzalnost bez prepnuti kodove sady znaku asi nepujde.
![](img/forum_nove_psp_new.png)
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
![](/img/smile/1.gif)
![](/img/smile/2.gif)
![](/img/smile/3.gif)
![](/img/smile/4.gif)
![](/img/smile/5.gif)
![](/img/smile/6.gif)
![](/img/smile/7.gif)
![](/img/smile/8.gif)
![](/img/smile/9.gif)
![](/img/smile/10.gif)
![](/img/smile/11.gif)
![](/img/smile/12.gif)
![](/img/smile/13.gif)
![](/img/smile/14.gif)
![](/img/smile/15.gif)
![](/img/smile/16.gif)
![](/img/smile/17.gif)
![](/img/smile/18.gif)
![](/img/smile/19.gif)
![](/img/smile/20.gif)
![](/img/smile/21.gif)
![](/img/smile/22.gif)
![](/img/smile/23.gif)
![](/img/smile/24.gif)
![](/img/smile/25.gif)
![](/img/smile/26.gif)
![](/img/smile/27.gif)
![](/img/smile/28.gif)
![](/img/smile/29.gif)
![](/img/smile/30.gif)
![](/img/smile/31.gif)
![](/img/smile/32.gif)
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Odstranění znaků z pole — založil Sprinter
Odstranění bílých znaků+javascript a get, post — založil Fonadius
Ako na vyhladanie znaku/znakovresp.slov v nejakom value? + Ako na ma… — založil Lordest
Moderátoři diskuze