Změna textu - Odebrat diakritiku a mezery – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Změna textu - Odebrat diakritiku a mezery – PHP – Fórum – Programujte.comZměna textu - Odebrat diakritiku a mezery – PHP – Fórum – Programujte.com

 

fix0
Stálý člen
3. 7. 2019   #1
-
0
-

Ahoj, neznáte nějaký co nejjednodušší způsob ideálně funkce($string), která by mi transformovala text do primitivní podoby bez malých písmen (všechno do uppercase), diakritiky, bez mezer a znamének, které nejsou alfanumerické. Znaky jako #!,? a všechny ostatní mají být ignorovány.

<?php

$string = "Můj text ke transformaci do primitivní podoby";

echo nejakafunkce($string);  //Vrátí: MUJTEXTKETRANSFORMACIDOPRIMITIVNIPODOBY

?>

Nahlásit jako SPAM
IP: 89.24.217.–
Jerry
~ Anonymní uživatel
512 příspěvků
3. 7. 2019   #2
-
0
-

#1 fix

PHP 4 měl tohle
https://www.php.net/manual/en/function.ctype-alnum.php

https://www.php.net/manual/en/function.strtoupper.php

jak je to te´d v 7čce tonevim

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:bd29:100:7779:7942...–
peter
~ Anonymní uživatel
4014 příspěvků
4. 7. 2019   #3
-
+1
-
Zajímavé
fix +

1. strtr - nejdriv se zbav diakritiky

function strtoupper_ga($a) {
    return strtr(mb_strtoupper($a, "utf-8"), array(
      " MB" => " mB",
      " GC" => " gC",
    ));
}
https://www.php.net/…rtoupper.php

$table = array( // pouzitelne pro I pro UTF-8
        'Š'=>'S', 'š'=>'s', 'Đ'=>'Dj', 'đ'=>'dj', 'Ž'=>'Z', 
    );
    return strtr($string, $table);
https://www.php.net/…on.strtr.php
Example #1 strtr() example
$addr = strtr($addr, "äåö", "aao");

2. a se zbav velkych pismen pomoci strtolower(), nebo hned tim strtr, 
$str = strtolower($str);

3. a pak cizich znaku, neco jako
preg_replace('~[\W\D]+~', '-', $str); nebo 
preg_replace('~[^a-z0-9]+~', '-', $str);


Vsechno se ale mirne komplikuje, pokud tam mas utf-8 nebo utf-16. Examply najdes v manual u tech 3 funkci. Jinak by to slo napsat na 3 radky, jak vidis.

Nahlásit jako SPAM
IP: 2001:718:2601:258:4dbc:3838:5a25:f2e0...–
peter
~ Anonymní uživatel
4014 příspěvků
4. 7. 2019   #4
-
0
-

No, a jeste ten preg_replace uprav tak, aby odstranil '-' na zacatku a na konci. Ale to snad zvladnes vygooglovat uz sam :)

Nahlásit jako SPAM
IP: 2001:718:2601:258:4dbc:3838:5a25:f2e0...–
Kit+15
Guru
4. 7. 2019   #5
-
0
-

#3 peter
Nebylo by jednodušší použít funkci iconv(), která to umí?

Nahlásit jako SPAM
IP: 213.175.43.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
remmidemmi0
Věrný člen
5. 7. 2019   #6
-
0
-

iconv() se dá oblbnout. Postačí , když se pak v textu objeví znak jiné sady.

Nahlásit jako SPAM
IP: 130.255.16.–
fix0
Stálý člen
5. 7. 2019   #7
-
0
-

Děkuji, již by to asi mělo být téměř hotové. Ještě prosím či neznáte funkci, která by odmazala všechny znaky, které nejsou [a-Z][0-9], ANIŽ BYCH JE MUSEL VŠECHNY VYPSAT, JE JICH MRAKY. :-) Děkuji moc.

Děkuji, již by to asi mělo být téměř hotové. Ještě prosím či neznáte funkci, která by odmazala všechny znaky, které nejsou [a-Z][0-9], ANIŽ BYCH JE MUSEL VŠECHNY VYPSAT, JE JICH MRAKY. :-) Děkuji moc.

<?php

$data = "Můj-text! ke transformaci do primitivní podoby?";

$table = array( // pouzitelne pro I pro UTF-8 'Š'=>'S',

'ú'=>'U',
'Ú'=>'U',
'ů'=>'U',
'Ů'=>'U',
'ě'=>'E',
'š'=>'S',
'č'=>'C',
'ř'=>'R',
'ž'=>'Z',
'ý'=>'Y',
'á'=>'A',
'í'=>'I',
'é'=>'E',
'Ě'=>'E',
'Š'=>'S',
'Č'=>'C',
'Ř'=>'R',
'Ž'=>'Z',
'Ý'=>'Y',
'Á'=>'A',
'Í'=>'I',
'É'=>'E' ); return strtr($data, $table);
//pravděpodobně, tentestováno "MUj-text! ke transformaci do primitivnI podoby?"

$data = str_replace(' ','',strtoupper($data));
//pravděpodobně, tentestováno "MUJ-TEXT!KETRANSFORMACIDOPRIMITIVNIPODOBY?"
// teď ještě potřebuji nějakou funkci, která vymaže vše [a-Z][0-1](,.-ů§¨ú)=´;+\?:_"!'/(%ˇ°+@ a kdo ví co všechno ještě, abniž bych všechny ty znaky musel ručně vypisovat

TajemnaFunkceKterouNeznam($data); //<--------------------------- neznáte řešení, jakou funkcí to řešit, aby z toho nebyl kód na 50 řádků? :-) něco jako regulární jazyk, který neumím v rámci nějakého sed/preg_replace? :-)
//cílový výsledek "MUJTEXTKETRANSFORMACIDOPRIMITIVNIPODOBY"
?>
Nahlásit jako SPAM
IP: 89.24.217.–
peter
~ Anonymní uživatel
4014 příspěvků
8. 7. 2019   #8
-
0
-

TajemnaFunkceKterouNeznam($data);
Myslis jako znova napsat tu funkci, co uz jsem napsal driv? :)

Nahlásit jako SPAM
IP: 2001:718:2601:258:4dbc:3838:5a25:f2e0...–
MilanL+1
Grafoman
10. 7. 2019   #9
-
0
-

#7 fix
tomu se asi nevyhneš, ale můžeš si ušetřit 1/2, pokud nejdříve provedeš uppercase, měli by snad stačit náhrady velkých písmen.

Případně si pro přehlednost dát do řádky znaky se stejnou transformací, např všechny varianty '..' => 'U, na další řádce všechny varianty .. =>'E' atd

na ty ostatní znaky by možná mohl zafungovat nějaký regulární výraz.

Nahlásit jako SPAM
IP: 91.139.9.–
MilanL+1
Grafoman
10. 7. 2019   #10
-
+2
-
Zajímavé
Kit +
fix +

#9 MilanL

zkusil bych

$nova_data=preg_replace("/[^0-9A-Z]/", "", $data);

pokud to nebude fungovat, budeš si nějakou fci muset udělat sám

$data="AHOJ FIXi, JA JSEM Já a CHCI TI 89%0 NĚCO UKAZAT []{}÷×($";

echo preg_replace("/[^0-9A-Z]/", "", $data);

online test php výsledek
AHOJFIXJAJSEMJCHCITI890NCOUKAZAT

obvykle stačí zeptat se strýčka Googla, někdy jde jen o správnou formulaci dotazu.

Nahlásit jako SPAM
IP: 91.139.9.–
Kit+15
Guru
10. 7. 2019   #11
-
+1
-
Zajímavé
fix +

#7 fix

<?php
$text = <<<
Můj-text! ke transformaci do primitivní podoby?
Příliš žluťoučký kůň úpěl ďábelské ódy za 10 €.
AHOJ FIXi, JA JSEM Já a CHCI TI 89%0 NĚCO UKAZAT []{}÷×($
EOT;
setlocale(LC_CTYPE, 'cs_CZ.UTF-8');
$data = strtoupper(iconv("UTF-8", "ASCII//TRANSLIT", $text));
$novaData=preg_replace("/[^0-9A-Z]/", "", $data);
echo $novaData . PHP_EOL;

Výsledek: 

MUJTEXTKETRANSFORMACIDOPRIMITIVNIPODOBYPRILISZLUTOUCKYKUNUPELDABELSKEODYZA10EURAHOJFIXIJAJSEMJAACHCITI890NECOUKAZATX
Nahlásit jako SPAM
IP: 94.113.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
MilanL+1
Grafoman
11. 7. 2019   #12
-
0
-
Nahlásit jako SPAM
IP: 185.112.167.–
fix0
Stálý člen
1. 8. 2019   #13
-
0
-

MilanL a fixi děkuji vám oběma moc. Nicméně mi není jedna věc jasná. Faše funkce fungují obě stejně, jen ta fxova je mnohem delší a nechápu ji. Má nějakou výhodou použít tu od fixe nebo tu od milana?

Děkuji za vysvětlení

Nahlásit jako SPAM
IP: 89.24.217.–
gna
~ Anonymní uživatel
1891 příspěvků
1. 8. 2019   #14
-
0
-

#13 fix
Kitova verze jsou jen 2 řádky navíc a je to kompletní řešení tvého problému.

iconv na odstranění diakritiky, strtoupper na převod na velká písmena, preg_replace na odstranění nealfanumerických znaků.

Z výsledku je to snad jasné.

Nahlásit jako SPAM
IP: 213.211.51.–
MilanL+1
Grafoman
2. 8. 2019   #15
-
0
-

#13 fix
ten můj kod byl kratší jen jako funkce pro ten výstup daných znaků čísla + velká písmena, neměl jsem tam tu funkci s náhradou písmen s diakritikou a UPPERCASE. Kit to tam měl s tou transformací UTF do ASCII a uppercase. proto se to zdá delší.

Nahlásit jako SPAM
IP: 91.139.9.–
fix0
Stálý člen
3. 8. 2019   #16
-
0
-

#14 gna

Děkuji, už jsem si všiml, že milanova verze si neporadila s "ě" a kitova jo.

Děkuji moc kitovi za konstrukci skriptu, tobě za vysvětlení a milanovi za snahu mi pomoci.

Nahlásit jako SPAM
IP: 89.24.217.–
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, 61 hostů

Podobná vlákna

Změna textu u TextBoxu — založil DamageDealer

C# Změna textu v Label — založil Godysek

 

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