Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Ustawienie Modrewrite - usunięcie spacji i polskich znaków
Forum PHP.pl > Forum > Przedszkole
krzysiuus
Panowie chcę usunąć spacje i polskie znaki z adresów.

Funkcja odpowiedzialna za adresy:

  1. public function get_blog_url($query=FALSE)
  2. {
  3. global $SITEURL, $PRETTYURLS;
  4. $blogurl = $this->getSettingsData("blogurl");
  5. $data = getXML(GSDATAPAGESPATH . $blogurl . '.xml');
  6. $url = find_url($blogurl, $data->parent);
  7.  
  8. if($query)
  9. {
  10. if($query == 'rss')
  11. {
  12. $url = $SITEURL.'plugins/blog/rss.php';
  13. }
  14. elseif($PRETTYURLS == 1 && $this->getSettingsData("prettyurls") == 'Y')
  15. {
  16. $url .= $query . '/';
  17. }
  18. elseif($blogurl == 'index')
  19. {
  20. $url = $SITEURL . "index.php?$query=";
  21. }
  22. else
  23. {
  24. $url = $SITEURL . "index.php?id=$blogurl&$query=";
  25. }
  26. }
  27. return $url;
  28. }


Niestety nie funkcjonuje poprawnie gdyż adresy są ze spacjami i z polskimi znakami...


Poniżej mam funkcję która działa w innym serwisie:
  1. if (isset($_GET['id'])){
  2. $id = str_replace ('..','',$_GET['id']);
  3. $id = str_replace ('/','',$id);
  4. $id = lowercase($id);
  5. } else {
  6. $id = "index";
  7. }


I ta funkcja działa prawidłowo. Polskie znaki zamieniane są na zwykłe litery bez ogonków a spacje na myślinki.

I teraz pytanie jak dodać do tego pierwszego skryptu dodatki aby linki nie miały polskich znaków a spacje były zamieniane na myśliniki.

W htaccess mam coś takiego:

  1. RewriteEngine on
  2.  
  3. # Usually RewriteBase is just '/', but
  4. # replace it with your subdirectory path
  5. RewriteBase /
  6. RewriteRule ^post/([^/.]+)/?$ index.php?id=index&post=$1 [L]
  7. RewriteRule ^tag/([^/.]+)/?$ index.php?id=index&tag=$1 [L]
  8. RewriteRule ^page/([^/.]+)/?$ index.php?id=index&page=$1 [L]
  9. RewriteRule ^archive/([^/.]+)/?$ index.php?id=index&archive=$1 [L]
  10. RewriteRule ^category/([^/.]+)/?$ index.php?id=index&category=$1 [L]
  11. RewriteCond %{REQUEST_FILENAME} !-f
  12. RewriteCond %{REQUEST_FILENAME} !-d
  13. RewriteRule /?([A-Za-z0-9_-]+)/?$ index.php?id=$1 [QSA,L]


Może ktoś zerknąć i nakierować?
in5ane
Ja używam takiej funkcji:
  1. function generatePermalink($link)
  2. {
  3. $rf = array(
  4. "\r",
  5. "\n",
  6. "\r\n",
  7. "\n\r",
  8. 'а',
  9. 'б',
  10. 'в',
  11. 'г',
  12. 'д',
  13. 'е',
  14. 'ё',
  15. 'ж',
  16. 'з',
  17. 'и',
  18. 'й',
  19. 'к',
  20. 'л',
  21. 'м',
  22. 'н',
  23. 'о',
  24. 'п',
  25. 'р',
  26. 'с',
  27. 'т',
  28. 'у',
  29. 'ф',
  30. 'х',
  31. 'ц',
  32. 'ч',
  33. 'ш',
  34. 'щ',
  35. 'ъ',
  36. 'ы',
  37. 'ь',
  38. 'э',
  39. 'ю',
  40. 'я'
  41. );
  42. $rt = array(
  43. '',
  44. '',
  45. '',
  46. '',
  47. 'a',
  48. 'b',
  49. 'v',
  50. 'g',
  51. 'd',
  52. 'e',
  53. 'jo',
  54. 'zh',
  55. 'z',
  56. 'i',
  57. 'j',
  58. 'k',
  59. 'l',
  60. 'm',
  61. 'n',
  62. 'o',
  63. 'p',
  64. 'r',
  65. 's',
  66. 't',
  67. 'u',
  68. 'f',
  69. 'h',
  70. 'c',
  71. 'ch',
  72. 'sh',
  73. 'w',
  74. '',
  75. 'y',
  76. '',
  77. 'je',
  78. 'ju',
  79. 'ja'
  80. );
  81. $clean = str_replace(array(
  82. '^',
  83. "'",
  84. '"',
  85. '`',
  86. '~'
  87. ), '', iconv('UTF-8', 'ASCII//TRANSLIT', str_replace($rf, $rt, mb_strtolower($link, 'UTF-8'))));
  88. $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean);
  89. $clean = strtolower(trim($clean, '-'));
  90. $clean = preg_replace("/[\/_|+ -]+/", '-', $clean);
  91.  
  92. return $clean;
  93. }
marian84
  1.  
  2. function ClearPolishSigns($text)
  3. {
  4. $ReplacePolishSign = array(
  5. 'ą' => 'a', 'Ą' => 'A', 'ę' => 'e', 'Ę' => 'E',
  6. 'ć' => 'c', 'Ć' => 'C', 'ń' => 'n', 'Ń' => 'N', 'ł' => 'l',
  7. 'Ł' => 'L', 'ś' => 's', 'Ś' => 'S', 'ż' => 'z',
  8. 'Ż' => 'Z', 'ź' => 'z', 'Ź' => 'Z', 'ó' => 'o', 'Ó' => 'o'
  9. );
  10.  
  11. return str_replace(array_keys($ReplacePolishSign), array_values($ReplacePolishSign), $text);
  12. }
  13. function FriendlyTitle($text)
  14. {
  15. $text = ClearPolishSigns($text);
  16. $text = strtolower($text);
  17. $text = str_replace(' ', '-', $text);
  18. $text = preg_replace('/[^0-9a-z\-]+/', '', $text);
  19. $text = preg_replace('/[\-]+/', '-', $text);
  20. $text = trim($text, '-');
  21. return $text;
  22. }
  23.  
  24. echo FriendlyTitle('string który chcesz przerobić');
  25.  
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-2025 Invision Power Services, Inc.