Autor | Zpráva | ||
---|---|---|---|
Vítězslav Mergl Profil |
#1 · Zasláno: 5. 2. 2010, 20:50:49
Zdravím,
Potřeboval bych poradit ohledně funkce pro MySql. Problém: nepodařilo se mi přepisovat více jak jeden znak. funkce v PHP: function url_name($string){ $not_keys = array('ě','š','č','ř','ž','ý','á','í','é',' ','ů','ú','ť','.'); $val_keys = array('e','s','c','r','z','y','a','i','e','_','u','u','t',''); $string = str_replace($not_keys,$val_keys,$string); return $string; } To, co jsem zatím dokázal udělat: CREATE FUNCTION url_name (s CHAR(60)) set @url = REPLACE(s,'č','c'); RETURNS CHAR(60) RETURN s; Předem děkuji za odpovědi. |
||
Časová prodleva: 7 dní
|
|||
Kajman_ Profil * |
#2 · Zasláno: 12. 2. 2010, 15:04:07
Nepůjde to alespoň postupně?
CREATE FUNCTION url_name (s CHAR(60)) set @url = s; set @url = REPLACE(@url,'ě','e'); set @url = REPLACE(@url,'š','s'); set @url = REPLACE(@url,'č','c'); ... RETURNS CHAR(60) RETURN @url; |
||
fuckin Profil |
#3 · Zasláno: 12. 2. 2010, 15:11:53
Ano postupně to jde. Lze bezproblému použít něco takového
set @url = REPLACE(REPLACE(REPLACE(REPLACE(clanek, 'č', 'c'), 'ř', 'r'), 'š', 's'), 'ž', 'z'); |
||
Vítězslav Mergl Profil |
#4 · Zasláno: 12. 2. 2010, 15:44:10 · Upravil/a: Vítězslav Mergl
Problem jsem již vyřešil. Bohužel ani jedno z těchto řešení není funkční.
řešení spočívá v nastavenem kodovaní mysql. jestliže kodovaní se rovná utf8_czech_ci, tak č = c, Č=c, c=C atd... jinak ale děkuji za snahu :) Důvod nefunkčnosti vašich řešení: set @p1 = REPLACE(p2,'č','c'); Funkce replace ma return true,false, nikoli upravenou hodnotu. K řešení od kajmana: Syntaxe tveho zapisu je šapná a pri alikaci vyhodi chybu. Ačkoli logicky je priklad řešený správně, nepodařilo se mi najít funkkční syntaxy. |
||
Kajman_ Profil * |
Funkce replace ma return true,false, nikoli upravenou hodnotu.
Jakou máte verzi mysql? Mně tohle funguje (s tím, že to vrátí vždy malá písmena). CREATE FUNCTION `url_name`(s varchar(60)) RETURNS varchar(60) CHARSET utf8 begin declare retstr varchar(60); set retstr=lower(ifnull(s,'')); set retstr=replace(retstr,'ě','e'); set retstr=replace(retstr,'š','s'); set retstr=replace(retstr,'č','c'); return retstr; end A to původní taky jde, jen jsem použil Vaši spatnou syntaxy, o které jste tvrdil, že funguje :-) CREATE FUNCTION url_name2 (s CHAR(60)) RETURNS CHAR(60) begin set @url = s; set @url = REPLACE(@url,'ě','e'); set @url = REPLACE(@url,'š','s'); set @url = REPLACE(@url,'č','c'); RETURN @url; end |
||
Vítězslav Mergl Profil |
#6 · Zasláno: 12. 2. 2010, 17:23:04
mnohokrát děkuji, toto řešení je pravděpodoně správné. Nicméně zjištění poznatku ohledne kodovani v utf8_czech_ci mi naprosto vyhovuje. Určitě ale zhodnotím tuto radu při dalších podobných problémech.
|
||
Časová prodleva: 14 let
|
0