Met de volgende topic titel:
Nog een test topic!?&#$
Krijg ik het volgende resultaat:
nog-een-test-topic-----
Hij vervangt nu de vreemde tekens dus in - opzich goed bij de spaties maar niet op de plekken van de vreemde tekens, deze moeten gewoon verwijderd worden en klaar. Iemand tips hoe ik dit kan oplossen?
Ja oke dat is een 'dirty' oplossing denk ik. Is er geen andere optie in preg_replace welke het wel kan doen?
Overigens lost jouw oplossing het niet op. Want de streepjes zijn de vreemde tekens welke helemaal weg moeten, dus ook de streepjes, met str_replace vevang je de streepjes door één streepje.
Edit: Pepijn ik snbao die van jouw ook niet helemaal. Vreemde tekens kunnen van alles zijn als *#$^#*%(&*#%$ '" ; enz.
hmm, nu ik er over nadenk is het eigenlijk wel logisch om ook vreemde tekens in haakjes te veranderen, denk aan [email protected] -> example-domain-com, de truc is dus om dus idd dubbele er uit te filteren, dus misschien checken of ze niet aan het begin of een eind van een string zitten, je wil natuurlijk ook geen '<spatie>naam' -> '-naam' hebben.
iet met '^\-+' en '\-+$' ?
in een versie die - gebruikt als koppelteken ipv _ :
<?php
function URLstring($input){
// delete some chars that not may be replaced with a space char
$temp = str_replace(array("'",'"'),'',$input);
// replace special chars by readable variant
$temp = str_replace(array('&','@','$'),array(' en ',' at ','dollar'),$temp);
// replace strange chars to their equivalent
$temp = preg_replace('#&(.)[a-z]+;#','$1',htmlentities($temp));
// replace all others by an underscore
$temp = preg_replace('#[^a-zA-Z0-9\_]+#','-',$temp);
// done, clean up and return the result
return trim($temp,'-_');
}
function is_validURLstring($string){
return ($string === urlencode($string));
}
Als je het script bekijkt zie je dat je kunt kiezen: of tekens verdwijnen helemaal, of ze worden vervangen door de eerste letter van de &..; code na de &. In een reactie onderaan (volgens mij een van mijzelf) staat de code als je alle tekens weg wilt hebben. Die twee streepjes tussen in kunnen ook weg, dan moet je dit invoegen:
<?php
// niet getest, maar zou wel moeten werken.
while(strstr($koppelteken.$koppelteken, $string)) {
$string = str_replace($koppelteken.$koppelteken, $koppelteken, $string);
}
?>
Plaatsen vóór de return maar ná de trim(), da's denk ik de beste plek ;-).
-- Edit: Maar die van Hipska houdt geen rekening met tekens als ä, ë, ò, etc. Die van mij en, staat bij Hipska's script in een reactie, die van Jonathan doen dat wel ;-).