řetězec - odstranění nečitelných znaků – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

řetězec - odstranění nečitelných znaků – PHP – Fórum – Programujte.comřetězec - odstranění nečitelných znaků – PHP – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Pavelv0
Stálý člen
16. 9. 2014   #1
-
0
-

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?

Nahlásit jako SPAM
IP: 212.79.110.–
Reklama
Reklama
Kit+11
Guru
16. 9. 2014   #2
-
0
-

#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;
Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Pavelv0
Stálý člen
16. 9. 2014   #3
-
0
-

#2 KitTa funkce mi ale odstraní veškerou diaktriku. Podobné řešení jsem našel tady. Takže asi udělám podobné pole.

Nahlásit jako SPAM
IP: 212.79.110.–
Kit+11
Guru
16. 9. 2014   #4
-
0
-

#3 Pavelv

... dále pak všechna diaktrická písmena převede na bez diaktriky

Dělej si příště srandu z někoho jiného.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Pavelv0
Stálý člen
16. 9. 2014   #5
-
0
-

#4 Kit
Tvoje funkce mi vrací pernskivantvrdexjetovl, ale já chci prisernyskrivantvrdizexjetovul

Nahlásit jako SPAM
IP: 212.79.110.–
Kit+11
Guru
16. 9. 2014   #6
-
0
-

#5 Pavelv
Mně ta funkce funguje jak má. Asi máš jinou znakovou sadu.

Nahlásit jako SPAM
IP: 82.117.132.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
2551 příspěvků
17. 9. 2014   #7
-
0
-

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.

 

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:c171:ed...–
Pavelv0
Stálý člen
18. 9. 2014   #8
-
0
-

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


  }
}
    
Nahlásit jako SPAM
IP: 212.79.110.–
Kit+11
Guru
18. 9. 2014   #9
-
0
-

#8 Pavelv
Obávám se, že tudy cesta nevede. Tvá funkce je stále závislá na znakové sadě a rozhodně je méně univerzální.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
2551 příspěvků
18. 9. 2014   #10
-
0
-

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.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:ed1c:6e...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 45 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý