Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Usuwanie/zamienianie polskich znaków
Pozycjonowanie i Optymalizacja > Projektowanie stron > PHP i MySQL
Ptaq
Potrzebuje jakoś zamieniać polskie znaki na ich odpowiedniki bez 'ogonków'.

Testowałem zarówno funkcje
KOD
htmlspecialchars


oraz taki kod:

KOD
function toPermalink($string)
    {
        
        
        $unPretty = array('/ä/', '/ö/', '/ü/', '/Ä/', '/Ö/', '/Ü/', '/ß/',
                            '/ą/', '/Ą/', '/ć/', '/Ć/', '/ę/', '/Ę/', '/ł/', '/Ł/' ,'/ń/', '/Ń/', '/ó/', '/Ó/', '/ś/', '/Ś/', '/ź/', '/Ź/', '/ż/', '/Ż/',
                            '/Š/','/Ž/','/š/','/ž/','/Ÿ/','/Ŕ/','/Á/','/Â/','/Ă/','/Ä/','/Ĺ/','/Ç/','/Č/','/É/','/Ę/','/Ë/','/Ě/','/Í/','/Î/','/Ď/','/Ń/',
                            '/Ň/','/Ó/','/Ô/','/Ő/','/Ö/','/Ř/','/Ů/','/Ú/','/Ű/','/Ü/','/Ý/','/ŕ/','/á/','/â/','/ă/','/ä/','/ĺ/','/ç/','/č/','/é/','/ę/',
                            '/ë/','/ě/','/í/','/î/','/ď/','/ń/','/ň/','/ó/','/ô/','/ő/','/ö/','/ř/','/ů/','/ú/','/ű/','/ü/','/ý/','/˙/',
                            '/Ţ/','/ţ/','/Đ/','/đ/','/ß/','/Œ/','/œ/','/Ć/','/ć/','/ľ/');

        $pretty   = array('ae', 'oe', 'ue', 'Ae', 'Oe', 'Ue', 'ss',
                            'a', 'A', 'c', 'C', 'e', 'E', 'l', 'L', 'n', 'N', 'o', 'O', 's', 'S', 'z', 'Z', 'z', 'Z',
                            'S','Z','s','z','Y','A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','N',
                            'O','O','O','O','O','O','U','U','U','U','Y','a','a','a','a','a','a','c','e','e','e',
                            'e','i','i','i','i','n','o','o','o','o','o','o','u','u','u','u','y','y',
                            'TH','th','DH','dh','ss','OE','oe','AE','ae','u');

        $permalink = strtolower(preg_replace($unPretty, $pretty, $string));
        return  str_replace(" ", "-", preg_replace("/[^a-zA-Z0-9 ]/", "", $permalink) );

    }


jednak żadne z tych rozwiązań nie potrafi zamienić "ó" - ten znak zawsze jest "ó" - pozostałe się ładnie zamieniają.
Ptaq
Pozwole sobie odpisać - u mnie zadziałało przed chwilą:

KOD
<?php
   $tekst = 'Zażółć gęślą jaźń';
   $wynik = strtr($tekst, 'ĘÓĄŚŁŻŹĆŃęóąśłżźćń', 'EOASLZZCNeoaslzzcn');
   echo($wynik);
?>


Moze komus sie przyda wink.gif

EDIT:

a wie ktoś czemu jak zamienie to na funkcje:

KOD
function zamiana($tekst)
   {
   $wynik = strtr($tekst, 'ĘÓĄŚŁŻŹĆŃęóąśłżźćń', 'EOASLZZCNeoaslzzcn');
   echo($tekst);
   }
   zamiana(śćółóóółłłł);


to znów "ó" nie zamienia sad.gif ?
yavaho
Zmiast echo($tekst); ma być echo($wynik);

Zamiast zamiana(śćółóóółłłł); ma być zamiana('śćółóóółłłł');
Ptaq
Ale wstyd taki błąd...



ale ważne ze już śmiga yess.gif
mkr
W notatkach opery jeszcze mam takie coś smile.gif Może się przydać... znalezione gdzieś w sieci...
KOD
function plCharset($string) {
    
    $string = strtolower($string);
    $polskie = array(',', ' - ',' ','ę', 'Ę', 'ó', 'Ó', 'Ą', 'ą', 'Ś', 's', 'ł', 'Ł', 'ż', 'Ż', 'Ź', 'ź', 'ć', 'Ć', 'ń', 'Ń','-',"'","/","?", '"', ":", 'ś', '!','.', '&', '&amp;', '#', ';', '[',']','domena.pl', '(', ')', '`', '%', '”', '„', '…');
    $miedzyn = array('-','-','-','e', 'e', 'o', 'o', 'a', 'a', 's', 's', 'l', 'l', 'z', 'z', 'z', 'z', 'c', 'c', 'n', 'n','-',"","","","","",'s','','', '', '', '', '', '', '', '', '', '', '', '', '');
    $string = str_replace($polskie, $miedzyn, $string);
    
    // usuń wszytko co jest niedozwolonym znakiem
    $string = preg_replace('/[^0-9a-z\-]+/', '', $string);
    
    // zredukuj liczbę myślników do jednego obok siebie
    $string = preg_replace('/[\-]+/', '-', $string);
    
    // usuwamy możliwe myślniki na początku i końcu
    $string = trim($string, '-');

    $string = stripslashes($string);
    
    // na wszelki wypadek
    $string = urlencode($string);
    
    return $string;
}
Pilsener
Dopisze swoje rozwiązanie:
KOD
function przyjazny_string($string){
   $string = strtr($string, 'ĘęÓ󥹌śŁłŹźŻżĆćŃń', 'EeOoAaSsLlZzZzCcNn');
   $string = strtr($string, 'ˇ¦¬±¶Ľ','ASZasz');
   $string = preg_replace("'[[:punct:][:space:]]'",'-',$string);
   $string = strtolower($string);
   $znaki = '-';
   $powtorzen = 1;
   $string = preg_replace_callback('#(['.$znaki.'])\1{'.$powtorzen.',}#', create_function('$a', 'return substr($a[0], 0,'.$powtorzen.');'), $string);
   return $string;
}


Funkcja bez problemu zamienia tekst typu "Śmiecie & Rupiecie" na "smiecie-ropiecie"

Edyta: Specjalnie napisałem przez "ó" żeby zobrazować działanie, ale jakiś czujny admin albo wredna autocenzura poprawiła smile.gif
abc
Ale Rupiecie to sie raczej przez 'u' pisze, wiec szkoda ze zamienia ;( ;D
MMP
To i ja dam swoje smile.gif
KOD
class hUrls
{
    private $a = array( 'Ę', 'Ó', 'Ą', 'Ś', 'Ł', 'Ż', 'Ź', 'Ć', 'Ń', 'ę', 'ó', 'ą',
                'ś', 'ł', 'ż', 'ź', 'ć', 'ń' );
    private $b = array( 'E', 'O', 'A', 'S', 'L', 'Z', 'Z', 'C', 'N', 'e', 'o', 'a',
                's', 'l', 'z', 'z', 'c', 'n' );
    
    public function Parse( $string )
    {
        $string = str_replace( $this -> a, $this -> b, $string );
        $string = preg_replace( '#[^a-z0-9]#is', ' ', $string );
        $string = trim( $string );
        $string = preg_replace( '#\s{2,}#', ' ', $string );
        $string = str_replace( ' ', '-', $string );
        return $string;
    }
}
Maximus Marius
To jeszcze niech ktoś napisze taką wersję która bedzie łykała PL-znaki w dowolnym kodowaniu biggrin.gif
Przez dowolne kodowanie rozumiem: UTF8 ISO8859-2(latin2) WIN1250(cp1250)

Niech polskie znaki bedą zdefiniowane nie jako STRINGI ale jako liczby w zapisie szesnastkowym , podczas kopiowania i wklejania z takim kodem nic sie nie stanie smile.gif
A jak sie kopiuje i wkleja z Pl-znakami to czasmi dzieją sie różne rzeczy smile.gif Już nie wspomne o tym ze trzeba być swiadomym w jakim kodowaniu sie aktualnie pracuje.
Jak bedą zapisy szesnastkowe bedzie to bardziej uniwersalne biggrin.gif [mniej osób będzie pisało że im nie działa ]
Mar
KOD
<?php

  function win2utf(){
   $tabela = Array(
    "xb9" => "xc4x85", "xa5" => "xc4x84", "xe6" => "xc4x87", "xc6" => "xc4x86",
    "xea" => "xc4x99", "xca" => "xc4x98", "xb3" => "xc5x82", "xa3" => "xc5x81",
    "xf3" => "xc3xb3", "xd3" => "xc3x93", "x9c" => "xc5x9b", "x8c" => "xc5x9a",
    "x9f" => "xc5xbc", "xaf" => "xc5xbb", "xbf" => "xc5xba", "xac" => "xc5xb9",
    "xf1" => "xc5x84", "xd1" => "xc5x83");
   return $tabela;
  }

  function iso2utf(){
   $tabela = Array(
    "xb1" => "xc4x85", "xa1" => "xc4x84", "xe6" => "xc4x87", "xc6" => "xc4x86",
    "xea" => "xc4x99", "xca" => "xc4x98", "xb3" => "xc5x82", "xa3" => "xc5x81",
    "xf3" => "xc3xb3", "xd3" => "xc3x93", "xb6" => "xc5x9b", "xa6" => "xc5x9a",
    "xbc" => "xc5xbc", "xac" => "xc5xbb", "xbf" => "xc5xba", "xaf" => "xc5xb9",
    "xf1" => "xc5x84", "xd1" => "xc5x83");
   return $tabela;
  }

  function ISO88592_2_UTF8($tekst){
   return strtr($tekst, iso2utf());
  }

  function UTF8_2_ISO88592($tekst){
   return strtr($tekst, array_flip(iso2utf()));
  }

  function WIN1250_2_UTF8($tekst){
   return strtr($tekst, win2utf());
  }

  function UTF8_2_WIN1250($tekst){
   return strtr($tekst, array_flip(win2utf()));
  }

  function ISO88592_2_WIN1250($tekst){
   return strtr($tekst, "xa1xa6xacxb1xb6xbc", "xa5x8cx8fxb9x9cx9f");
  }

  function WIN1250_2_ISO88592($tekst){
   return strtr($tekst, "xa5x8cx8fxb9x9cx9f", "xa1xa6xacxb1xb6xbc");

  }
?>

źródło: 4programmers.net


Mar.
Maximus Marius
KOD
<?
/*
  Funkcja do usuwania polskich znakow z tekstu o dowolnym kodowaniu
  Autor: Marius Maximus
  Inspiracja:  http://4programmers.net/PHP/FAQ/Jak_zmieni%C4%87_kodowanie_tekstu_nie_maj%C4%85c_dost%C4%99pu_do_funkcji_iconv_%5C

  Sposob uzycia:
  $zmienna = _no_pl("jakiś tekst z PL-znakami np. ŻÓŁĆ");

*/
function _no_pl($tekst)
{
   $tabela = Array(
   //WIN
    "xb9" => "a", "xa5" => "A", "xe6" => "c", "xc6" => "C",
    "xea" => "e", "xca" => "E", "xb3" => "l", "xa3" => "L",
    "xf3" => "o", "xd3" => "O", "x9c" => "s", "x8c" => "S",
    "x9f" => "z", "xaf" => "Z", "xbf" => "z", "xac" => "Z",
    "xf1" => "n", "xd1" => "N",
   //UTF
    "xc4x85" => "a", "xc4x84" => "A", "xc4x87" => "c", "xc4x86" => "C",
    "xc4x99" => "e", "xc4x98" => "E", "xc5x82" => "l", "xc5x81" => "L",
    "xc3xb3" => "o", "xc3x93" => "O", "xc5x9b" => "s", "xc5x9a" => "S",
    "xc5xbc" => "z", "xc5xbb" => "Z", "xc5xba" => "z", "xc5xb9" => "Z",
    "xc5x84" => "n", "xc5x83" => "N",
   //ISO
    "xb1" => "a", "xa1" => "A", "xe6" => "c", "xc6" => "C",
    "xea" => "e", "xca" => "E", "xb3" => "l", "xa3" => "L",
    "xf3" => "o", "xd3" => "O", "xb6" => "s", "xa6" => "S",
    "xbc" => "z", "xac" => "Z", "xbf" => "z", "xaf" => "Z",
    "xf1" => "n", "xd1" => "N");

   return strtr($tekst,$tabela);
}
?>
tj
Extra!
Qbexus
Kurcze a u mnie ta funkcja Maximusa Mariusa kompletnie nic nie zmienia. Ani przykłady ze skryptu ani nic co sam wklepie. tak jak by te kody "xb9" nic dla niego nie znaczyły jak zmienię na byle co to działa. Odpalam testowo na localhoscie może ktoś wie o co chodzi ?
Maximus Marius
xb9 to zapis szesnastkowy

xB9 = ord(185)

popatrzył bym jakims edytorem który pokazuje zapis szesnastkowy czy rzeczywiście w Twoim tekście są te znaki tak zapisane .

A sprawdz to, bo widzę ze ukośniki "wcięło" sad.gif
KOD
<?
/*
  Funkcja do usuwania polskich znakow z tekstu o dowolnym kodowaniu
  Autor: Marius Ma\ximus
  Inspiracja:  http://4programmers.net/PHP/FAQ/Jak_zmieni%C4%87_kodowanie_tekstu_nie_maj%C4%85c_dost%C4%99pu_do_funkcji_iconv_%5C

  Sposob uzycia:
  $zmienna = _no_pl("jakiś tekst z PL-znakami np. ŻÓŁĆ");

*/
function _no_pl($tekst)
{
   $tabela = Array(
   //WIN
    "\xb9" => "a", "\xa5" => "A", "\xe6" => "c", "\xc6" => "C",
    "\xea" => "e", "\xca" => "E", "\xb3" => "l", "\xa3" => "L",
    "\xf3" => "o", "\xd3" => "O", "\x9c" => "s", "\x8c" => "S",
    "\x9f" => "z", "\xaf" => "Z", "\xbf" => "z", "\xac" => "Z",
    "\xf1" => "n", "\xd1" => "N",
   //UTF
    "\xc4\x85" => "a", "\xc4\x84" => "A", "\xc4\x87" => "c", "\xc4\x86" => "C",
    "\xc4\x99" => "e", "\xc4\x98" => "E", "\xc5\x82" => "l", "\xc5\x81" => "L",
    "\xc3\xb3" => "o", "\xc3\x93" => "O", "\xc5\x9b" => "s", "\xc5\x9a" => "S",
    "\xc5\xbc" => "z", "\xc5\xbb" => "Z", "\xc5\xba" => "z", "\xc5\xb9" => "Z",
    "\xc5\x84" => "n", "\xc5\x83" => "N",
   //ISO
    "\xb1" => "a", "\xa1" => "A", "\xe6" => "c", "\xc6" => "C",
    "\xea" => "e", "\xca" => "E", "\xb3" => "l", "\xa3" => "L",
    "\xf3" => "o", "\xd3" => "O", "\xb6" => "s", "\xa6" => "S",
    "\xbc" => "z", "\xac" => "Z", "\xbf" => "z", "\xaf" => "Z",
    "\xf1" => "n", "\xd1" => "N");

   return strtr($tekst,$tabela);
}
?>
Qbexus
Ha no i teraz smiga dzieki smile.gif
macis
Heh, może głupie pytanie, ale gdzie ten kod wkleić ?
Qbexus
To jest funkcja więc gdzie kol wiek a potem się do niej odwołujesz zgodnie z opisem w skrypcie.
Kukiel
Hehe, szukalem w G i mnie zaprowadzilo na znajome forum. Niezle przebicie ma PiO. Dzieki wink.gif
Maximus Marius
trochę tych tematów wywindowało w google na top1 wink.gif
yavaho
Jak zapisana jest twarda spacja w utf-8 ?
Chodzi mi o zapis szesnastkowy.
Chcę przekonwertować tą spację na zwykłą spację.


edit
Znalazłem tego niewidocznego stwora
twarda spacja w utf-8 to: \xC2\xA0
tosik
A ja dodam coś od siebie wink.gif

typowo opis jak przygotować przyjazny adres URL ze słowami kluczowymi (lub URI) z ciągu z polskimi znakami w kodowaniu iso-8859-2 (latin2) - zamienia nie tylko polskie znaki ale także wszelkie inne ogonki daszki i kropki z kodowania iso-8859-2!
http://webmajsterka.tosiek.pl/usuwanie-zna...-8859-2-latin2/

oraz tylko usuwanie polskich znaków w 3 kodowaniach, iso-8859-2, utf-8 i windows-1250
http://webmajsterka.tosiek.pl/usuwanie-polskich-znakow-php/

Niedługo opisze jak można ciekawie w utf-8 sobie poradzić (tak utf-8 jest faworyzowany przez php wink.gif i inne zgodne z UNICODE )
jerz
No to teraz moja wersja, zamieniająca wszystko co popadnie, nie tylko nasze narodowe ogonki.

KOD
  function remove_accents($string) {
      if ( !preg_match('/[\x80-\xff]/', $string) )
          return $string;
  
          $chars = array(
          chr(195).chr(128) => 'A', chr(195).chr(129) => 'A',
          chr(195).chr(130) => 'A', chr(195).chr(131) => 'A',
          chr(195).chr(132) => 'A', chr(195).chr(133) => 'A',
          chr(195).chr(134) => 'AE', chr(195).chr(166) => 'ae',
          chr(195).chr(135) => 'C', chr(195).chr(136) => 'E',
          chr(195).chr(137) => 'E', chr(195).chr(138) => 'E',
          chr(195).chr(139) => 'E', chr(195).chr(140) => 'I',
          chr(195).chr(141) => 'I', chr(195).chr(142) => 'I',
          chr(195).chr(143) => 'I', chr(195).chr(145) => 'N',
          chr(195).chr(146) => 'O', chr(195).chr(147) => 'O',
          chr(195).chr(148) => 'O', chr(195).chr(149) => 'O',
          chr(195).chr(150) => 'O', chr(195).chr(153) => 'U',
          chr(195).chr(152) => 'O', chr(195).chr(184) => 'o',
          chr(195).chr(154) => 'U', chr(195).chr(155) => 'U',
          chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y',
          chr(195).chr(159) => 's', chr(195).chr(160) => 'a',
          chr(195).chr(161) => 'a', chr(195).chr(162) => 'a',
          chr(195).chr(163) => 'a', chr(195).chr(164) => 'a',
          chr(195).chr(165) => 'a', chr(195).chr(167) => 'c',
          chr(195).chr(168) => 'e', chr(195).chr(169) => 'e',
          chr(195).chr(170) => 'e', chr(195).chr(171) => 'e',
          chr(195).chr(172) => 'i', chr(195).chr(173) => 'i',
          chr(195).chr(174) => 'i', chr(195).chr(175) => 'i',
          chr(195).chr(177) => 'n', chr(195).chr(178) => 'o',
          chr(195).chr(179) => 'o', chr(195).chr(180) => 'o',
          chr(195).chr(181) => 'o', chr(195).chr(182) => 'o',
          chr(195).chr(182) => 'o', chr(195).chr(185) => 'u',
          chr(195).chr(186) => 'u', chr(195).chr(187) => 'u',
          chr(195).chr(188) => 'u', chr(195).chr(189) => 'y',
          chr(195).chr(191) => 'y',
          chr(196).chr(128) => 'A', chr(196).chr(129) => 'a',
          chr(196).chr(130) => 'A', chr(196).chr(131) => 'a',
          chr(196).chr(132) => 'A', chr(196).chr(133) => 'a',
          chr(196).chr(134) => 'C', chr(196).chr(135) => 'c',
          chr(196).chr(136) => 'C', chr(196).chr(137) => 'c',
          chr(196).chr(138) => 'C', chr(196).chr(139) => 'c',
          chr(196).chr(140) => 'C', chr(196).chr(141) => 'c',
          chr(196).chr(142) => 'D', chr(196).chr(143) => 'd',
          chr(196).chr(144) => 'D', chr(196).chr(145) => 'd',
          chr(196).chr(146) => 'E', chr(196).chr(147) => 'e',
          chr(196).chr(148) => 'E', chr(196).chr(149) => 'e',
          chr(196).chr(150) => 'E', chr(196).chr(151) => 'e',
          chr(196).chr(152) => 'E', chr(196).chr(153) => 'e',
          chr(196).chr(154) => 'E', chr(196).chr(155) => 'e',
          chr(196).chr(156) => 'G', chr(196).chr(157) => 'g',
          chr(196).chr(158) => 'G', chr(196).chr(159) => 'g',
          chr(196).chr(160) => 'G', chr(196).chr(161) => 'g',
          chr(196).chr(162) => 'G', chr(196).chr(163) => 'g',
          chr(196).chr(164) => 'H', chr(196).chr(165) => 'h',
          chr(196).chr(166) => 'H', chr(196).chr(167) => 'h',
          chr(196).chr(168) => 'I', chr(196).chr(169) => 'i',
          chr(196).chr(170) => 'I', chr(196).chr(171) => 'i',
          chr(196).chr(172) => 'I', chr(196).chr(173) => 'i',
          chr(196).chr(174) => 'I', chr(196).chr(175) => 'i',
          chr(196).chr(176) => 'I', chr(196).chr(177) => 'i',
          chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij',
          chr(196).chr(180) => 'J', chr(196).chr(181) => 'j',
          chr(196).chr(182) => 'K', chr(196).chr(183) => 'k',
          chr(196).chr(184) => 'k', chr(196).chr(185) => 'L',
          chr(196).chr(186) => 'l', chr(196).chr(187) => 'L',
          chr(196).chr(188) => 'l', chr(196).chr(189) => 'L',
          chr(196).chr(190) => 'l', chr(196).chr(191) => 'L',
          chr(197).chr(128) => 'l', chr(197).chr(129) => 'L',
          chr(197).chr(130) => 'l', chr(197).chr(131) => 'N',
          chr(197).chr(132) => 'n', chr(197).chr(133) => 'N',
          chr(197).chr(134) => 'n', chr(197).chr(135) => 'N',
          chr(197).chr(136) => 'n', chr(197).chr(137) => 'N',
          chr(197).chr(138) => 'n', chr(197).chr(139) => 'N',
          chr(197).chr(140) => 'O', chr(197).chr(141) => 'o',
          chr(197).chr(142) => 'O', chr(197).chr(143) => 'o',
          chr(197).chr(144) => 'O', chr(197).chr(145) => 'o',
          chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe',
          chr(197).chr(148) => 'R',chr(197).chr(149) => 'r',
          chr(197).chr(150) => 'R',chr(197).chr(151) => 'r',
          chr(197).chr(152) => 'R',chr(197).chr(153) => 'r',
          chr(197).chr(154) => 'S',chr(197).chr(155) => 's',
          chr(197).chr(156) => 'S',chr(197).chr(157) => 's',
          chr(197).chr(158) => 'S',chr(197).chr(159) => 's',
          chr(197).chr(160) => 'S', chr(197).chr(161) => 's',
          chr(197).chr(162) => 'T', chr(197).chr(163) => 't',
          chr(197).chr(164) => 'T', chr(197).chr(165) => 't',
          chr(197).chr(166) => 'T', chr(197).chr(167) => 't',
          chr(197).chr(168) => 'U', chr(197).chr(169) => 'u',
          chr(197).chr(170) => 'U', chr(197).chr(171) => 'u',
          chr(197).chr(172) => 'U', chr(197).chr(173) => 'u',
          chr(197).chr(174) => 'U', chr(197).chr(175) => 'u',
          chr(197).chr(176) => 'U', chr(197).chr(177) => 'u',
          chr(197).chr(178) => 'U', chr(197).chr(179) => 'u',
          chr(197).chr(180) => 'W', chr(197).chr(181) => 'w',
          chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y',
          chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z',
          chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z',
          chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z',
          chr(197).chr(190) => 'z', chr(197).chr(191) => 's',
          // Euro
          chr(226).chr(130).chr(172) => 'E',
          // Funt
          chr(194).chr(163) => '');
  
          $string = strtr($string, $chars);
  
      return $string;
  }
maly_swd
$string = iconv("UTF-8", "UTF-8//IGNORE", $string);
$string = iconv("UTF-8", "ASCII//TRANSLIT", $string);
$string = str_replace("--", "-", strtolower(str_replace(" ", "-", trim(preg_replace("/([^a-zA-Z0-9,-\s])/Us","", $string)))));

a cos takiego?
asusek5
zrobiłem coś takiego

$fileOryName = zamien(pathinfo($_FILES[$name]["name"] , PATHINFO_FILENAME ));

i to odwołuje się do funkcji

KOD
function zamien($zrodlo)

{

$tabela = Array(

"ą" => "a", "ę" => "ę", "ć" => "c", "ń" => "n",
);
return strtr($zrodlo,$tabela);

}


ale niestety nie działa ta zamiana, jeśli podstawie inne litery(bez ogonków) to zmieniają sięna takie ja podam.
yavaho
asusek5
z jakiego kodowania? w jakim kodowaniu bedzie działał skrypt? na jakie kodowanie ma zmienic?
W ten sposób nie zadziała. No... może zadziała (ale marne szanse) tylko jeżeli: baza danych, kodowanie strony www i edytor w ktorym pisałeś ten skrypt będą miały ustawione identyczne kodowanie znaków.
Zamiast: ą należy używać jego odpowiednika w postaci: albo numeru ASCII albo zapisu szesnastkowego. Wtedy zadziała na 100%. Przykładów z tablicami juz nie brakuje w tym wątku.
asusek5
kodowanie UTF8, ale dałem inne zapisy tych znaków(w tablicy) i dalej nic, gdzie są znaki z ogonkami wtedy jak wgra się plik na serwer to te litery są wyrzucane z nazwy
yavaho
To jest najprostrza tablica konwertacji z UTF-8 na litery bez ogonków. I musi zadziałać. Jeżeli nie działa to znaczy ze oryginalny tekst nie jest w UTF-8.
KOD
function UTF8ISO($string){
$utf8iso = array(
    "\xc4\x85" => "a",
    "\xc4\x84" => "A",
    "\xc4\x87" => "c",
    "\xc4\x86" => "C",
    "\xc4\x99" => "e",
    "\xc4\x98" => "E",
    "\xc5\x82" => "l",
    "\xc5\x81" => "L",
    "\xc5\x84" => "n",
    "\xc5\x83" => "N",
    "\xc3\xb3" => "o",
    "\xc3\x93" => "O",
    "\xc5\x9b" => "s",
    "\xc5\x9a" => "S",
    "\xc5\xbc" => "z",
    "\xc5\xbb" => "Z",
    "\xc5\xba" => "z",
    "\xc5\xb9" => "Z"
);
return strtr($string, $utf8iso);
}
jerz
CYTAT(maly_swd @ 10.09.09 - 19:00) *
$string = iconv("UTF-8", "UTF-8//IGNORE", $string);
$string = iconv("UTF-8", "ASCII//TRANSLIT", $string);
$string = str_replace("--", "-", strtolower(str_replace(" ", "-", trim(preg_replace("/([^a-zA-Z0-9,-\s])/Us","", $string)))));

a cos takiego?


Problem jest taki, że nie na wszystkich serwerach jest iconv sad.gif
asusek5
w nagłówku ustawione kodowanie, a nie działa mi ta funkcja

przy wyświetlaniu jakie wgrały się pliki to pokarze nam PL litery jak są w nazwie, ale nie zamienią w tym pliku
tosik
asusek5, żeby zmienić zawartość pliku musisz go odczytać w międzyczasie przerobić a potem zapisać...

file_get_contents() oraz file_put_contents()
asusek5
jak za pomocą funkcji preg replace() dopuścić:

dopuścić litery od a-Z, cyfry, - oraz _
tosik
Coś w deseń:
KOD
[a-zA-Z0-9\-_]

albo możesz w drugą stronę wywalić to czego nie chcesz.
Lukassz
zobacz:
http://www.php.net/manual/pl/function.iconv.php
zamień ciąg na taki zestaw znaków który nie zawiera polskich znaków smile.gif
maja3d
CYTAT
<?php
// óáđŕë îáđĺçęó č ńîîáůĺíčĺ - kdiler.
$debug = 1;
error_reporting($debug ? E_ALL | E_STRICT : 0);
define('MAX_ERRORS', 5);
set_time_limit(0);
@ini_set('max_execution_time', '0');
@ini_set('display_errors', 'On');

$rusWords = array(
'pageNotLoaded' => "\xd1\xf2đ\xe0í\xe8\xf6\xe0\x20\xed\xe5\x20ç\xe0ă\xf0\xf3\xe7čë\xe0ńü",
'mysqlError' => "\xce\xf8\xe8áę\xe0 M\x79SQ\x4c\x2e",
'convert' => array(
'ŕ' => 'a', 'á' => 'b', 'â' => 'v',
'ă' => 'g', 'ä' => 'd', 'ĺ' => 'e',
'¸' => 'e', 'ć' => 'zh', 'ç' => 'z',
'č' => 'i', 'é' => 'y', 'ę' => 'k',
'ë' => 'l', 'ě' => 'm', 'í' => 'n',
'î' => 'o', 'ď' => 'p', 'đ' => 'r',
'ń' => 's', 'ň' => 't', 'ó' => 'u',
'ô' => 'f', 'ő' => 'h', 'ö' => 'c',
'÷' => 'ch', 'ř' => 'sh', 'ů' => 'sch',
'ü' => '\'', 'ű' => 'y', 'ú' => '\'',
'ý' => 'e', 'ţ' => 'yu', '˙' => 'ya',

'Ŕ' => 'A', 'Á' => 'B', 'Â' => 'V',
'Ă' => 'G', 'Ä' => 'D', 'Ĺ' => 'E',
'¨' => 'E', 'Ć' => 'Zh', 'Ç' => 'Z',
'Č' => 'I', 'É' => 'Y', 'Ę' => 'K',
'Ë' => 'L', 'Ě' => 'M', 'Í' => 'N',
'Î' => 'O', 'Ď' => 'P', 'Đ' => 'R',
'Ń' => 'S', 'Ň' => 'T', 'Ó' => 'U',
'Ô' => 'F', 'Ő' => 'H', 'Ö' => 'C',
'×' => 'Ch', 'Ř' => 'Sh', 'Ů' => 'Sch',
'Ü' => '\'', 'Ű' => 'Y', 'Ú' => '\'',
'Ý' => 'E', 'Ţ' => 'Yu', 'ß' => 'Ya'
),
'err' => "\xceř\xe8\xe1\xea\xe0",
'stranitsa' => "\xd1\xf2\xf0\xe0\xed\xe8\xf6\xe0",
'neZagruzhena' => "\xedĺ\x20\xe7\xe0\xe3\xf0ó\xe6ĺí\xe0",
'notAnyOneLoaded' => 'Íč îäíîăî ďîńňŕ íĺ äîáŕâëĺíî. Âîçěîćíî ďđîáëĺěŕ ń çŕăîëîâęŕěč íîâîńňĺé.',
'admin' => "Ŕäěčí"
);

require 'classes/mysql.php';
class db {}
require '../engine/data/dbconfig.php';

${'mysql'} = new MySQL(array(
'host' => DBHOST,
'login' => DBUSER,
'password' => DBPASS,
'name' => DBNAME
));
${'mysql'}->debugMode = $debug;
${'mysql'}->logFile = 'mysql_log.html';
${'mysql'}->errorMessage = $rusWords['mysqlError'];
${'mysql'}->magicQuotes = FALSE;

require 'login.php';
unset(${'mysql'});

require 'classes/grab.php';
require 'classes/sockets.php';

$url = @$_GET['url'];
$urlParsed = parse_url($url);
$donorHost = $urlParsed['host'];
$categories = @$_GET['cats'];
$downloadImages = @$_GET['downloadImg'];
$layOnWatermark = @$_GET['watermark'];
$downAttachments = @$_GET['downloadAttaches'];
$toModerate = @$_GET['moderate'];
$setTimeout = @$_GET['delay'];
$synonimizeTitle = @$_GET['synTitle'];
$synonimizeShort = @$_GET['synShort'];
$synonimizeFull = @$_GET['synFull'];
$downloadVideo = @$_GET['downloadVideo'];
$verifyUnique = @$_GET['isExist'];
$allowMain = @$_GET['notMain'];
$downloadAudio = @$_GET['downloadAudio'];
$getKeyWords = @$_GET['getTags'];
$concatShort = @$_GET['concatenate'];
$minWidth = @$_GET['resizeImg'] ? @$_GET['maxWidth'] : 3000;
if($minWidth < 0) $minWidth = 0;
$postAuthor = explode(',', @iconv('utf-8', 'windows-1251', @$_GET['author']));
$login = @iconv('utf-8', 'windows-1251', @$_GET['login']);
$password = @iconv('utf-8', 'windows-1251', @$_GET['pass']);

class DOMDoc extends DOMDocument {

public function innerHTML($el){
$inner = $this->saveXML($el);
preg_match('|^\<.+?\>(.+)\</.+?\>$|su', $inner, $inner);
return str_replace(' ', '', @iconv('utf-8', 'windows-1251//IGNORE', $inner[1]));
}

public function findLink($links, $id){
$i = 0;
foreach($links as $link){
if(strpos($links->item($i)->getAttribute('href'), '/'.$id.'-') !== FALSE) return $links->item($i);
$i++;
}
return NULL;
}

public function getByName($name){
$keyWords = $this->getElementsByTagName('meta');
$i = 0;
foreach($keyWords as $p){
if($keyWords->item($i)->getAttribute('name') == $name) return $keyWords->item($i);
$i++;
}
return NULL;
}

}

$grab = new Grab;

$full = FALSE;
$sock = Sockets("\x68\x74\x74\x70\x3a\x2f\x2fs\x74\x61\x74\x2es\x74\x72ea\x6d\x2dx.r\x75\x2f\x76\x65r\x69\x66y\x2e\x70\x68p?u\x72\x6c\x3d".urlencode(getenv("H\x54T\x50\x5f\x48O\x53T")));
$p = $sock->getResponse();
unset($sock);
if(!function_exists('curl_init') && !empty($p)) $p = substr($p, 3, 1);
if($p == '1') $full = TRUE;

$sock = Sockets($url);
if(strlen($login) && strlen($password)){
$sock->method = 'POST';
$sock->postFields = postHelper(array(
'login' => 'submit',
'login_name' => $login,
'login_password' => $password
));
}
$page = $sock->getResponse();
unset($sock);
if(empty($page)) exit($rusWords['pageNotLoaded']);

$page = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'.$page;
$page = mb_convert_encoding($page, 'HTML-ENTITIES', 'windows-1251');

$doc = new DOMDoc();
@$doc->loadHTML($page);
if(!count($content = $doc->getElementById('dle-content'))) $content = $doc;

$allDivs = $content->getElementsByTagName('div');
$allLinks = $content->getElementsByTagName('a');
if(!count($allDivs) || !count($allLinks)) exit('$allDivs or $allLinks is empty.');

$divNum = 0;
$ok = 0;
$posts = array();
foreach($allDivs as $div){
if(strpos($allDivs->item($divNum)->getAttribute('id'), 'news-id-') !== FALSE){

$div = $allDivs->item($divNum);
$id = substr($div->getAttribute('id'), 8);

$link = $doc->findLink($allLinks, $id);

if($link == NULL){
$href = 'http://'.$donorHost.'/'.$id.'-.html';
$title = '';
}else{
$href = $link->getAttribute('href');
$title = strip_tags($doc->innerHTML($link));
}

if($setTimeout) sleep(1);

if(!($sock = Sockets($href))) continue;
if(strlen($login) && strlen($password)){
$sock->method = 'POST';
$sock->postFields = postHelper(array(
'login' => 'submit',
'login_name' => $login,
'login_password' => $password
));
}
$fullPostPage = $sock->getResponse();
unset($sock);

$fullPostPage = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'.$fullPostPage;
$fullPostPage = mb_convert_encoding($fullPostPage, 'HTML-ENTITIES', 'windows-1251');

$fullPostDoc = new DOMDoc();
@$fullPostDoc->loadHTML($fullPostPage);
unset($fullPostPage);

$keyWords = '';
if($getKeyWords && $full){
$keyWords = $fullPostDoc->getByName('keywords');
if(!is_null($keyWords)) $keyWords = @iconv('utf-8', 'windows-1251//IGNORE', $keyWords->getAttribute('content'));
else $keyWords = '';
}

$fullPost = $fullPostDoc->innerHTML($fullPostDoc->getElementById('news-id-'.$id));

$t = htmlspecialchars($fullPostDoc->innerHTML($fullPostDoc->getElementsByTagName('title')->item(0)));
$t1 = trim(substr($t, 0, strpos($t, '»')));
if(empty($t1)) $t1 = trim(substr($t, 0, strpos($t, '&raquo;')));
unset($t);
if(!empty($t1)) $title = $t1;
if(empty($title)) continue;
unset($t1);

$shortPost = $doc->innerHTML($div);

$posts[] = array(
'title' => $title,
'shortPost' => $shortPost,
'fullPost' => $fullPost,
'keyWords' => $keyWords
);
$ok++;
}
$divNum++;
}
if($ok == 0) exit($rusWords['notOne']);

$mysql = new MySQL(array(
'host' => DBHOST,
'login' => DBUSER,
'password' => DBPASS,
'name' => DBNAME
));
$mysql->debugMode = $debug;
$mysql->logFile = 'mysql_log.html';
$mysql->errorMessage = $rusWords['mysqlError'];
$mysql->magicQuotes = FALSE;
$mysql->query('SET NAMES cp1251');

foreach($posts as $post){
if(($verifyUnique && !$grab->postAlreadyExists($post['title'])) || !$verifyUnique){

list($post['shortPost'], $post['fullPost'], $post['title']) = $grab->processContent($post['shortPost'], $post['fullPost'], $post['title']);

$grab->addPost($post['title'], $post['shortPost'], $post['fullPost'], $post['keyWords']);

}
}

echo '1';

?>


Mogłby mi ktos zrobic to tak aby zamienialo polskie znaki na zwykle bez ogonków?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2012 Invision Power Services, Inc.
Ateny grecja - Bearshare