login  Naam:   Wachtwoord: 
Registreer je!
 Forum

str_replace geeft rare tekens (Opgelost)

Offline bertenz - 23/06/2009 09:58
Avatar van bertenzHTML beginner Hallo allemaal,

Om de titel van een bericht in de URL te gebruiken, wil ik alle tekens als á ä à = ' " enz. in de titel vervangen. Dit doe ik met str_replace waar ik 2 arrays invoer om de tekens te zoeken en te vervangen. Mijn code ziet er zo uit:

  1. function clean_url($f_sOld_url)
  2. {
  3. $f_aFind = array('á', 'ä', 'à', 'ã', 'â', 'é', 'ë', 'è', 'ê', 'í', 'ï', 'ì', 'î', 'ó', 'ö', 'ò', 'õ', 'ô', 'ú', 'ü', 'ù', 'û', 'ý', 'ÿ', 'ñ', 'ç', 'Á', 'Ä', 'À', 'Ã', 'Â', 'É', 'Ë', 'È', 'Ê', 'Í', 'Ï', 'Ì', 'Î', 'Ó', 'Ö', 'Ò', 'Õ', 'Ô', 'Ú', 'Ü', 'Ù', 'Û', 'Ý', 'Ñ', 'Ç', '\'', '/', '\\', '"', '.', ',', '+', ';', '=', '`');
  4. $f_aReplace = array('a', 'a', 'a', 'a', 'a', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y', 'n', 'c', 'a', 'a', 'a', 'a', 'a', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'n', 'c', '', '', '', '', ' ', ' ', ' ', ' ', 'is', ' ');
  5. $f_sCurrent_url = str_replace($f_aFind, $f_aReplace, $f_sOld_url);
  6.  
  7. $f_aFind_2 = array(' ', ' ', ' ', ' ');
  8. $f_aReplace_2 = array('_', '_', '_', '_');
  9. $f_sNew_url = str_replace($f_aFind_2, $f_aReplace_2, $f_sCurrent_url);
  10. return $f_sNew_url;
  11. }

In de head van mijn website heb ik de charset zo staan:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Nu krijg ik echter niet het gewenste resultaat. Als ik bijvoorbeeld de string "áäàã" invoer, krijg ik 4 keer een "a" afgewisseld met een "onbekend-teken" (ruitje met een vraagteken erin).

Iemand enig idee wat ik hier fout doe?

9 antwoorden

Gesponsorde links
Offline Ijspegel - 23/06/2009 10:01
Avatar van Ijspegel Nieuw lid Staat je bestands codering wel op UTF-8? Bij mij was dat weleens de oorzaak. Bij de codering in notepad++ stond daar toen ansi ingesteld.
Offline Koen - 23/06/2009 10:06 (laatste wijziging 23/06/2009 10:07)
Avatar van Koen PHP expert
  1. $string = strtr($string, 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ
  2. ßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿ', 'AAAAAAACEEEEIIIIDNOOOOOOUUUUY
  3. BSaaaaaaaceeeeiiiidnoooooouuuyyby');

Deze gaat een beter resultaat geven denk ik :-)
PHP.net: strtr
Offline bertenz - 23/06/2009 10:26
Avatar van bertenz HTML beginner Allebei bedankt voor jullie reacties.
@ Koen: Jouw code heeft bijna hetzelfde effect, echter zijn alle letters nu hoofdletters geworden.
@ Ijspegel: Waar kan ik dat ergens zien welke codering het bestand heeft? Ik gebruik nu Dreamweaver CS4.
Offline Ijspegel - 23/06/2009 10:55 (laatste wijziging 23/06/2009 10:55)
Avatar van Ijspegel Nieuw lid Hier in ieder geval meer informatie over codering en ook een stukje + linkje over BOM. http://wiki.phpfreakz.nl/Charactersets

Ikzelf gebruik geen dreamweaver, dus weet niet waar die instelling zit. Misschien dat je het op http://www.adob...rata2.html vindt.
Offline bertenz - 23/06/2009 11:04
Avatar van bertenz HTML beginner Ijspegel, hartstikke bedankt voor jouw hulp. Blijkbaar stond die instelling verkeerd, nu werkt het namelijk wel perfect! Nogmaals bedankt!
Offline Ijspegel - 23/06/2009 11:14
Avatar van Ijspegel Nieuw lid Graag gedaan hoor!  
Offline bertenz - 23/06/2009 21:54
Avatar van bertenz HTML beginner Hoi allemaal,

Sorry, maar het werkt blijkbaar toch niet. Omdat ik snel naar een tentamen moest, had ik het heel even snel getest, maar het bleek toch niet te werken ...   Ik krijg nog steeds die rare tekens... In Dreamweaver heb ik inmiddels de pagina-instellingen op UTF-8 gezet, maar dat hielp dus helaas niet. Iemand enig idee hoe ik dit op kan lossen ?
Offline Tuinman - 24/06/2009 15:28
Avatar van Tuinman Nieuw lid Als ik deze code gebruik dan werkt het gewoon.

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>Untitled Document</title>
  6. </head>
  7.  
  8. <body>
  9. <?php
  10. $string = 'áááá === ááá`ééé éé';
  11. clean_url($string);
  12. function clean_url($f_sOld_url)
  13.  
  14. {
  15. $f_aFind = array('á', 'ä', 'à', 'ã', 'â', 'é', 'ë', 'è', 'ê', 'í', 'ï', 'ì', 'î', 'ó', 'ö', 'ò', 'õ', 'ô', 'ú', 'ü', 'ù', 'û', 'ý', 'ÿ', 'ñ', 'ç', 'Á', 'Ä', 'À', 'Ã', 'Â', 'É', 'Ë', 'È', 'Ê', 'Í', 'Ï', 'Ì', 'Î', 'Ó', 'Ö', 'Ò', 'Õ', 'Ô', 'Ú', 'Ü', 'Ù', 'Û', 'Ý', 'Ñ', 'Ç', '\'', '/', '\\', '"', '.', ',', '+', ';', '=', '`');
  16.  
  17. $f_aReplace = array('a', 'a', 'a', 'a', 'a', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y', 'n', 'c', 'a', 'a', 'a', 'a', 'a', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'n', 'c', '', '', '', '', ' ', ' ', ' ', ' ', 'is', ' ');
  18.  
  19. $f_sCurrent_url = str_replace($f_aFind, $f_aReplace, $f_sOld_url);
  20.  
  21. $f_aFind_2 = array(' ', ' ', ' ', ' ');
  22.  
  23. $f_aReplace_2 = array('_', '_', '_', '_');
  24.  
  25. $f_sNew_url = str_replace($f_aFind_2, $f_aReplace_2, $f_sCurrent_url);
  26.  
  27. echo $f_sNew_url;
  28. }
  29. ?>
  30. </body>
  31. </html>
Offline bertenz - 24/06/2009 21:09 (laatste wijziging 25/06/2009 08:26)
Avatar van bertenz HTML beginner Heel vreemd dan, want ik krijg elke keer bij invoer "á" een gewone "a" met zo'n raar teken erachter terug ...
Zijn er nog meer instellingen die ik nog in zou moeten stellen om het wel goed voor elkaar te krijgen ?

Edit: Het script werkt bij mij blijkbaar wel als ik zelf een string invoer in het php-bestand. Echter heb ik het nodig bij het verwerken van formulieren en dan ontstaat het probleem telkens.
Ik heb al geprobeerd om eerst stripslashes() te gebruiken, maar dat had geen effect.

Edit2: Na een hele tijd klooien met het script ben ik erachter gekomen dat het toch aan de codering van het script lag. Dus de oplossing is tóch wel die van Ijspegel. Waarschijnlijk heb ik na de eerste keer testen iets gedaan waardoor die codering weer teruggezet werd  Maar het probleem is dus inmiddels opgelost. Allemaal hartstikke bedankt voor de hulp!
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.187s