Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]usuwanie polskich znaków w stringu
-Gość-
post
Post #1





Goście







kiedys widziałem taką fajną funkcję która usuwała polskie znaki, jakies cyruliki i takie tam. istnieje funkcja która mi zwróci true/false w zależności czy string składa się tylko z normalnych znaków i efentualnie cyfr?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
wNogachSpisz
post
Post #2





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Do dupy z takim programem który raz działa a raz nie.
Wyślesz to przez FTP w trybie ASCII i skrypt nie nadaje się do niczego.
Albo ktoś kiedyś postanowi zajrzeć do skryptu, zmieni jakiś szczegół np. usunie biały znak, potem zapisze nie zwracając uwagi na kodowanie i znowu całość idzie w kibel.

Tak się tego nie robi.

Teraz troszke offtopne, bo autor nie znajduej czasu żeby odpowiedzieć na moje pytanie.

Oto metoda jakiej używam do zamiany diakrytyków na łacińskie odpowiedniki, o ile wiem nie da się lepiej, input musi być w UTF-8.

  1. <?php
  2.  
  3. require 'I18N/UnicodeNormalizer.php';
  4. $normalizer = new I18N_UnicodeNormalizer(); // z PEAR
  5.  
  6. function diacritic_replace( $s ) {
  7.  
  8. global $normalizer;
  9.  
  10. // maps German (umlauts) and other European characters onto two characters before just removing diacritics
  11. $s = preg_replace( '@\x{00c4}@u' , "AE", $s ); // umlaut Ä => AE
  12. $s = preg_replace( '@\x{00d6}@u' , "OE", $s ); // umlaut Ö => OE
  13. $s = preg_replace( '@\x{00dc}@u' , "UE", $s ); // umlaut Ü => UE
  14. $s = preg_replace( '@\x{00e4}@u' , "ae", $s ); // umlaut ä => ae
  15. $s = preg_replace( '@\x{00f6}@u' , "oe", $s ); // umlaut ö => oe
  16. $s = preg_replace( '@\x{00fc}@u' , "ue", $s ); // umlaut ü => ue
  17. $s = preg_replace( '@\x{00f1}@u' , "ny", $s ); // ń => ny
  18. $s = preg_replace( '@\x{00ff}@u' , "yu", $s ); // ˙ => yu
  19.  
  20. // maps special characters (characters with diacritics) on their base-character followed by the diacritical mark
  21. // exmaple: Ú => U´, á => a`
  22.  
  23. $s = $normalizer->normalize($s, 'NFD', 'UTF-8');
  24.  
  25. $s = preg_replace( '@\pM@u' , "", $s ); // removes diacritics
  26.  
  27. $s = preg_replace( '@\x{00df}@u' , "ss", $s ); // maps German ß onto ss
  28. $s = preg_replace( '@\x{00c6}@u' , "AE", $s ); // Ć => AE
  29. $s = preg_replace( '@\x{00e6}@u' , "ae", $s ); // ć => ae
  30. $s = preg_replace( '@\x{0132}@u' , "IJ", $s ); // ? => IJ
  31. $s = preg_replace( '@\x{0133}@u' , "ij", $s ); // ? => ij
  32. $s = preg_replace( '@\x{0152}@u' , "OE", $s ); // Œ => OE
  33. $s = preg_replace( '@\x{0153}@u' , "oe", $s ); // œ => oe
  34.  
  35. $s = preg_replace( '@\x{00d0}@u' , "D", $s ); // Đ => D
  36. $s = preg_replace( '@\x{0110}@u' , "D", $s ); // Đ => D
  37. $s = preg_replace( '@\x{00f0}@u' , "d", $s ); // đ => d
  38. $s = preg_replace( '@\x{0111}@u' , "d", $s ); // d => d
  39. $s = preg_replace( '@\x{0126}@u' , "H", $s ); // H => H
  40. $s = preg_replace( '@\x{0127}@u' , "h", $s ); // h => h
  41. $s = preg_replace( '@\x{0131}@u' , "i", $s ); // i => i
  42. $s = preg_replace( '@\x{0138}@u' , "k", $s ); // ? => k
  43. $s = preg_replace( '@\x{013f}@u' , "L", $s ); // ? => L
  44. $s = preg_replace( '@\x{0141}@u' , "L", $s ); // L => L
  45. $s = preg_replace( '@\x{0140}@u' , "l", $s ); // ? => l
  46. $s = preg_replace( '@\x{0142}@u' , "l", $s ); // l => l
  47. $s = preg_replace( '@\x{014a}@u' , "N", $s ); // ? => N
  48. $s = preg_replace( '@\x{0149}@u' , "n", $s ); // ? => n
  49. $s = preg_replace( '@\x{014b}@u' , "n", $s ); // ? => n
  50. $s = preg_replace( '@\x{00d8}@u' , "O", $s ); // Ř => O
  51. $s = preg_replace( '@\x{00f8}@u' , "o", $s ); // ř => o
  52. $s = preg_replace( '@\x{017f}@u' , "s", $s ); // ? => s
  53. $s = preg_replace( '@\x{00de}@u' , "T", $s ); // Ţ => T
  54. $s = preg_replace( '@\x{0166}@u' , "T", $s ); // T => T
  55. $s = preg_replace( '@\x{00fe}@u' , "t", $s ); // ţ => t
  56. $s = preg_replace( '@\x{0167}@u' , "t", $s ); // t => t
  57.  
  58. // remove all non-ASCii characters
  59. $s = preg_replace( '@[^\0-\x80]@u' , "", $s );
  60.  
  61. return $s;
  62. }


Ten post edytował wNogachSpisz 13.02.2012, 12:20:40
Go to the top of the page
+Quote Post

Posty w temacie
- Gość   [PHP]usuwanie polskich znaków w stringu   12.02.2012, 20:06:04
- - wNogachSpisz   To w końcu co? W temacie piszesz że chcesz usunąć ...   12.02.2012, 20:42:10
- - Gość   tak chce wykryć, wybacz mi   12.02.2012, 21:36:16
- - -Boria-   Spróbuj funkcji stristr() function validate_polis...   12.02.2012, 22:54:00
- - wNogachSpisz   Powiedz jeszcze czy wiadome jest jaki system kodow...   12.02.2012, 23:11:30
- - PanBorys   a to co napisałem wcześniej nie zadziala? Można w...   12.02.2012, 23:24:06
- - wNogachSpisz   Nie, nie zadziała - skuteczność będzie zależna od ...   12.02.2012, 23:45:27
- - camikazee   Wyrażeniami regularnymi możesz wykryć łatwo czy ci...   13.02.2012, 11:51:08
- - wNogachSpisz   Cytat(camikazee @ 13.02.2012, 11:51:0...   13.02.2012, 11:57:38
- - styryl   [PHP] pobierz, plaintext   function rewrit...   13.02.2012, 12:00:26
- - camikazee   Działać, zadziała, kwestia zmiany kodowania.   13.02.2012, 12:01:10
- - wNogachSpisz   Do dupy z takim programem który raz działa a raz n...   13.02.2012, 12:07:03
- - rocktech.pl   Witam. Co do usuwania. [PHP] pobierz, plaintext ...   13.02.2012, 12:21:43
- - wNogachSpisz   KodNotice: iconv() [function.iconv...   13.02.2012, 12:23:31
- - rocktech.pl   @wNogachSpisz Nie miałem nigdy problemów z iconv....   13.02.2012, 12:29:55
- - wNogachSpisz   Ja mam problem już na wejściu, wywala ERROR   13.02.2012, 12:34:27
- - Gość   mb_detect_encoding się dobrze spisuje w przypadku ...   13.02.2012, 17:07:41
- - wNogachSpisz   Jeśli kodowanie jest jednobajtowe - bazujące na st...   13.02.2012, 17:20:39
- - thek   Hmmm... A nie pomyślał nikt o zwykłym preg_match? ...   14.02.2012, 08:35:53


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.12.2025 - 00:59