Jump to content

české znaky v URL


mklapal
 Share

Recommended Posts

Ahoj,

narazil jsem na problém s tvorbou URL které obsahují české znaky

například:
produkt s názvem "žárovka" se v url zobrazí jako "http://.../11-arovka.html"

zatím jsem problém identifikoval u znaků ž, č, ř

nevíte kde to napravit? myslím že se to někde špatně převádí před uložením do DB.

Jedu na verzi 1.2.5

Díky Michal

Share this post


Link to post
Share on other sites

js/admin.js od asi 22 řádku nakopíruj (někde tu je postup rozsáhlejší,ale tohle by žárovku mělo vyřešit)

  str= str.replace(/[\u0161]/g,'s');
 str= str.replace(/[\u0159]/g,'r');
 str= str.replace(/[\u017E]/g,'z');
 str= str.replace(/[\u0148]/g,'n');
 str= str.replace(/[\u010F]/g,'d');
 str= str.replace(/[\u0165]/g,'t');

Share this post


Link to post
Share on other sites

vyřešeno, nebyly potřeba žádné úpravy, všechno funguje v pořádku

problém byl že jsem ty produkty importoval z CSV a proto se ty adresy nevytvořili správně

napsal jsem si skript který to opraví po importu výrobků (něco ve stylu "select name from ps_product_lang" a všechny name prohnal přes funkci seo_url(...) a updatoval do DB u daného ID

Share this post


Link to post
Share on other sites

  • 3 months later...

Admin.js jsem upravila, ale žádná změna. Když do názvu produktu napíšu "šiška", tak se mi vygeneruje níže přátelské url "ika" a to i po upraveném admin.js dle pokynů výše.
Není tam ještě někde zádrhel?

Share this post


Link to post
Share on other sites

Mne to stale nefunguje, vse mam upravene pro vkladani produktu v cestine, ale import jaksi nechce fungovat spravne.
Uz su z toho zoufaly, protoze jinak by import byl super, takto je mi na nic.
Kdyz se podivam na zdrojak nebo vlozim produkt rucne, tak je cestina naprosto bez problemu, jak to udelam pres import, tak se URL udela jak bylo napsane vyse vynechaji se znaky s diakritikou.

Share this post


Link to post
Share on other sites

I ja se pridavam, taky to newjak nemuzu zprovoznit a misto ČASOPISY, LITERATURA mam stale asopisy-literatura. DB smazana a import nanovo, prepsani stareho a porad nic. Tech par radku do admin.js sem vlozil.

Share this post


Link to post
Share on other sites

Celá funkce by měla vypadat takto:

function str2url(str,encoding,ucfirst)

{

   str = str.toUpperCase();

   str = str.toLowerCase();



   str = str.replace(/[\u0105\u0104\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5]/g,'a');

   str = str.replace(/[\u00E7\u0107\u0106]/g,'c');

   str = str.replace(/[\u00E8\u00E9\u00EA\u00EB\u0119\u0118\u011B]/g,'e');

   str = str.replace(/[\u00EC\u00ED\u00EE\u00EF]/g,'i');

   str = str.replace(/[\u0142\u0141]/g,'l');

   str = str.replace(/[\u00F2\u00F3\u00F4\u00F5\u00F6\u00F8\u00D3]/g,'o');

   str = str.replace(/[\u015B\u015A]/g,'s');

   str = str.replace(/[\u00F9\u00FA\u00FB\u00FC\u016F]/g,'u');

   str = str.replace(/[\u00FD\u00FF]/g,'y');

   str = str.replace(/[\u017C\u017A\u017B\u0179]/g,'z');

   str = str.replace(/[\u00F1]/g,'n');

   str = str.replace(/[\u0153]/g,'oe');

   str = str.replace(/[\u00E6]/g,'ae');

   str = str.replace(/[\u00DF]/g,'ss');

   str= str.replace(/[\u0161]/g,'s');
    str= str.replace(/[\u0159]/g,'r');
     str= str.replace(/[\u017E]/g,'z');
     str= str.replace(/[\u0148]/g,'n');
     str= str.replace(/[\u010F]/g,'d');
     str= str.replace(/[\u0165]/g,'t');
   str= str.replace(/[\u010D]/g,'c');

   str = str.replace(/[^a-z0-9\s\'\:\/\[\]-]/g,'');

   str = str.replace(/[\s\'\:\/\[\]-]+/g,' ');

   str = str.replace(/[ ]/g,'-');



   if (ucfirst == 1) {

       c = str.charAt(0);

       str = c.toUpperCase()+str.slice(1);

   }



   return str;

}



Pokud vám tam chybí nějakej českej znak, dejte vědět, zdarma doplním.

Share this post


Link to post
Share on other sites

Všechno u čeho začíná název na Bacardi %-P


Budou Ti stacit ty 300Kc na ucet, pac objednavat Ti to je asi nesmysl :o)
A pokud jsi z Brna, tak Ti ju klidne donesu ;o)

Share this post


Link to post
Share on other sites

Sem retardovanej a negramotnej, ale proste mi to nejde. á, ú v pořádku ale takový č ani smykem.. jo a mam 1.2.5 prestu kdyby se nekdo ptal..


V klidu, jsme dva :o))).
Naprosto zadnou diakritiku mi to neda do URL, vubec nic.

Share this post


Link to post
Share on other sites

Člověk "nemusí", ale každej si vymejšlí nějaký kokotiny, který by chtěl v eshopu mít, tak se musí přizpůsobit. Jinak Presta english rulez, takže s češtinou prostě nikdo nepočítá, ani teď ani v budoucnosti.

Share this post


Link to post
Share on other sites

No tak to bez diskuze, to je vsechno kvuli te pojebane cestine :o)), to vim, tos nenapsal novinu.
Ale zase na druhou stranu by to nemusel byt takovy problem.
Takze vis jak na to a napises to?

Share this post


Link to post
Share on other sites

Burani, tenhle script pusťte na vašem serveru, vyplňte si tam loginy apod...

<?php 

function friendly_url($nadpis) {
   $url = $nadpis;
   $url = strip_tags(html_entity_decode($url));
   $url = iconv("UTF-8","windows-1250"."//TRANSLIT",$url);
   $noalpha = "\xc1\xc9\xcd\xd3\xda\xdd\xe1\xe9\xed\xf3\xfa\xfd\xc2\xca\xce\xd4\xdb\xe2\xea\xee\xf4\xfb\xc0\xc8\xcc\xd2\xd9\xe0\xe8\xec\xf2\xf9\xc4\xcb\xcf\xd6\xdc\xe4\xeb\xef\xf6\xfc\xc3\xe3\xd5\xf5\xc5\xe5\xd1\xf1\xc7\xe7\xba\xaa\x8e\x9e\x9d\x8d\xd8\xf8\x8a\x9a";
   $alpha = 'AEIOUYaeiouyAEIOUaeiouACENUrcenuAEIOUaedouAaOoLlNnCcsSZztTRrSs';
   $url = strtr($url, $noalpha, $alpha);
   $url = strtolower($url);
   $url = preg_replace('~[^a-z0-9_]+~', '-', $url);
   $url = trim($url, "-");
   $url = preg_replace('~[^-a-z0-9_]+~', '', $url); 
   echo $url."\n";
   return $url;
}


//projde všechny výrobky v db
@$spojeni = MySQL_Connect('SERVER' ,'USER', 'PASSWORD');
@MySQL_Select_DB('DATABASE');
if (!$spojeni):
 echo "MySQL fatal error (no database)";
endif;
mysql_query("SET CHARACTER SET utf8");

$sql = "select id_product, name, id_lang from ps_product_lang";
$query = mysql_query($sql);
$num = mysql_num_rows($query);
while ($row=mysql_fetch_assoc($query)):
 $url = friendly_url($row['name']);
 $sql2 = "update ps_product_lang set link_rewrite = '$url' where id_product = {$row['id_product']} and id_lang = {$row['id_lang']}";
 mysql_query($sql2) or die("SQL dotaz nešlo provést");
endwhile;
echo "OK";

?>

Share this post


Link to post
Share on other sites

Mně to maká úplně normálně a taky mám verzi 1.2.5.0. Je potřeba stránku, kde zadáváš produkt reoladnout, pokud jsi upravival admin.js a možná by taky pomohlo vymazání obsahu na /html/tools/smarty/compile/.

Jinak na http://www.texaswebdevelopers.com/examples/xmlentities/xml_entities.asp je konvertor, kam zadáš českej znak a po stisknutí convert dostaneš jeho kód. Output format musíš zadat Mixed of decimal/hexadecimal. Takže pokud ti to neumí č, tak konvertor ti vrátí něco jako

č

. Od zadu vezmeš 2. až 4. znak t.j. 10d , přidáš před něj 0 a výsledek je to co musíš přidat pro přepis z č na c 010D. Pak ten řádek vypadá takto:

str= str.replace(/[\u010D]/g,'c');



Jestli v tom nemáš jiný svoje úpravy, zkus můj admin.js

admin.js

Share this post


Link to post
Share on other sites

Mně to maká úplně normálně a taky mám verzi 1.2.5.0. Je potřeba stránku, kde zadáváš produkt reoladnout, pokud jsi upravival admin.js a možná by taky pomohlo vymazání obsahu na /html/tools/smarty/compile/.

Jinak na http://www.texaswebdevelopers.com/examples/xmlentities/xml_entities.asp je konvertor, kam zadáš českej znak a po stisknutí convert dostaneš jeho kód. Output format musíš zadat Mixed of decimal/hexadecimal. Takže pokud ti to neumí č, tak konvertor ti vrátí něco jako
č

. Od zadu vezmeš 2. až 4. znak t.j. 10d , přidáš před něj 0 a výsledek je to co musíš přidat pro přepis z č na c 010D. Pak ten řádek vypadá takto:

str= str.replace(/[\u010D]/g,'c');



Jestli v tom nemáš jiný svoje úpravy, zkus můj admin.js



Ale nam se jednalo o import, ne zadavani produktu, tam to slape dobre.

Share this post


Link to post
Share on other sites

Burani, tenhle script pusťte na vašem serveru, vyplňte si tam loginy apod...

<?php 

function friendly_url($nadpis) {
   $url = $nadpis;
   $url = strip_tags(html_entity_decode($url));
   $url = iconv("UTF-8","windows-1250"."//TRANSLIT",$url);
   $noalpha = "\xc1\xc9\xcd\xd3\xda\xdd\xe1\xe9\xed\xf3\xfa\xfd\xc2\xca\xce\xd4\xdb\xe2\xea\xee\xf4\xfb\xc0\xc8\xcc\xd2\xd9\xe0\xe8\xec\xf2\xf9\xc4\xcb\xcf\xd6\xdc\xe4\xeb\xef\xf6\xfc\xc3\xe3\xd5\xf5\xc5\xe5\xd1\xf1\xc7\xe7\xba\xaa\x8e\x9e\x9d\x8d\xd8\xf8\x8a\x9a";
   $alpha = 'AEIOUYaeiouyAEIOUaeiouACENUrcenuAEIOUaedouAaOoLlNnCcsSZztTRrSs';
   $url = strtr($url, $noalpha, $alpha);
   $url = strtolower($url);
   $url = preg_replace('~[^a-z0-9_]+~', '-', $url);
   $url = trim($url, "-");
   $url = preg_replace('~[^-a-z0-9_]+~', '', $url); 
   echo $url."\n";
   return $url;
}


//projde všechny výrobky v db
@$spojeni = MySQL_Connect('SERVER' ,'USER', 'PASSWORD');
@MySQL_Select_DB('DATABASE');
if (!$spojeni):
 echo "MySQL fatal error (no database)";
endif;
mysql_query("SET CHARACTER SET utf8");

$sql = "select id_product, name, id_lang from ps_product_lang";
$query = mysql_query($sql);
$num = mysql_num_rows($query);
while ($row=mysql_fetch_assoc($query)):
 $url = friendly_url($row['name']);
 $sql2 = "update ps_product_lang set link_rewrite = '$url' where id_product = {$row['id_product']} and id_lang = {$row['id_lang']}";
 mysql_query($sql2) or die("SQL dotaz nešlo provést");
endwhile;
echo "OK";

?>



Super diky, tohle slape, akorad skoda, ze to nejde primo osetrit v kodu.

Share this post


Link to post
Share on other sites

Burani, tenhle script pusťte na vašem serveru, vyplňte si tam loginy apod...

<?php 

function friendly_url($nadpis) {
   $url = $nadpis;
   $url = strip_tags(html_entity_decode($url));
   $url = iconv("UTF-8","windows-1250"."//TRANSLIT",$url);
   $noalpha = "\xc1\xc9\xcd\xd3\xda\xdd\xe1\xe9\xed\xf3\xfa\xfd\xc2\xca\xce\xd4\xdb\xe2\xea\xee\xf4\xfb\xc0\xc8\xcc\xd2\xd9\xe0\xe8\xec\xf2\xf9\xc4\xcb\xcf\xd6\xdc\xe4\xeb\xef\xf6\xfc\xc3\xe3\xd5\xf5\xc5\xe5\xd1\xf1\xc7\xe7\xba\xaa\x8e\x9e\x9d\x8d\xd8\xf8\x8a\x9a";
   $alpha = 'AEIOUYaeiouyAEIOUaeiouACENUrcenuAEIOUaedouAaOoLlNnCcsSZztTRrSs';
   $url = strtr($url, $noalpha, $alpha);
   $url = strtolower($url);
   $url = preg_replace('~[^a-z0-9_]+~', '-', $url);
   $url = trim($url, "-");
   $url = preg_replace('~[^-a-z0-9_]+~', '', $url); 
   echo $url."\n";
   return $url;
}


//projde všechny výrobky v db
@$spojeni = MySQL_Connect('SERVER' ,'USER', 'PASSWORD');
@MySQL_Select_DB('DATABASE');
if (!$spojeni):
 echo "MySQL fatal error (no database)";
endif;
mysql_query("SET CHARACTER SET utf8");

$sql = "select id_product, name, id_lang from ps_product_lang";
$query = mysql_query($sql);
$num = mysql_num_rows($query);
while ($row=mysql_fetch_assoc($query)):
 $url = friendly_url($row['name']);
 $sql2 = "update ps_product_lang set link_rewrite = '$url' where id_product = {$row['id_product']} and id_lang = {$row['id_lang']}";
 mysql_query($sql2) or die("SQL dotaz nešlo provést");
endwhile;
echo "OK";

?>



Sice na lidi stekas ale i tak mas dobry srdce :o)

Share this post


Link to post
Share on other sites

  • 1 year later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More