FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Flitig postare
|
Hej,
behöver lite hjälp med att skapa en URL-vänlig sträng, dvs skala bort alla tänkbara specialtecken. Själv trodde jag det skulle gå bra med tex str_replace enligt nedan, men tex tecknen ' : á osv fungerar ej att ersätta. Ny inom PHP så jag har väl missat ngt. Se exempelkod nedan: Kod:
function urlizeString($aString) { $newTitle = str_replace("(", "", $aString); $newTitle = str_replace(")", "", $newTitle); $newTitle = str_replace("á", "a", $newTitle); $newTitle = str_replace("à", "a", $newTitle); $newTitle = str_replace("\'", "", $newTitle); $newTitle = str_replace(":", "", $newTitle); $newTitle = str_replace("/", "", $newTitle); $newTitle = str_replace("?", "", $newTitle); $newTitle = str_replace("\"", "", $newTitle); $newTitle = str_replace("ö", "oe", $newTitle); # ö $newTitle = str_replace("Ã¥", "au", $newTitle); # å $newTitle = str_replace("ä", "ae", $newTitle); # ä $newTitle = str_replace("Ã…", "Au", $newTitle); # Å $newTitle = str_replace("’", "", $newTitle); $newTitle = str_replace(",", "", $newTitle); $newTitle = str_replace(" ", "_", $newTitle); #$newTitle = ereg_replace("[^+A-Za-z0-9]", "", $newTitle =); return $newTitle; } |
||
![]() |
![]() |
![]() |
#2 | |||
|
||||
Mycket flitig postare
|
Kod:
function urlizeString($aString) { $aString=strtolower($aString); $newTitle = str_replace(array(' ','--','"','!','@','#','$','%','^','&','*','(',')','_','+','{','}','|',':','"','<','>','?','[',']','\\',';',"'",',','.','/','*','+','~','`','='), array('-','-','','','','','','','','','','','','','','','','','','','','','','','','');, $aString); return $newTitle; } Pröva lägg en \ framför ' |
|||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Flitig postare
|
Nope, det funkar inte heller för mig. Om jag tittar på hur tex phpbb gör så liknar det min lösning och det funkar inte om jag kopierar in och använder deras heller.
Att ersätta åäö samt mellanslagen funkar dock. Nån ide? Har jag missat någon setting, typ charset eller liknande? Kod:
function make_url_friendly($url) { $url = trim($url); $url = strtolower($url); // Fix for most recent topics block // or else a b is shown in every url $find = array('<b>', '</b>'); $url = str_replace ($find, '', $url); $url = preg_replace('/<(\/{0,1})img(.*?)(\/{0,1})\>/', 'image', $url); $find = array(' ', '"', 'quot', '&', 'amp;', '\r\n', '\n', '/', '\', '+', '<', '>'); $url = str_replace ($find, '-', $url); $find = array('é', 'è', 'ë', 'ê', 'É', 'È', 'Ë', 'Ê'); $url = str_replace ($find, 'e', $url); $find = array('í', 'ì', 'î', 'ï', 'Í', 'Ì', 'Î', 'Ï'); $url = str_replace ($find, 'i', $url); $find = array('ó', 'ò', 'ô', 'Ó', 'Ò', 'Ô'); $url = str_replace ($find, 'o', $url); $find = array('ö', 'Ö'); $url = str_replace ($find, 'o', $url); $find = array('á', 'à', 'â', 'Á', 'À', 'å', 'Å', 'Â'); $url = str_replace ($find, 'a', $url); $find = array('ä', 'Ä'); $url = str_replace ($find, 'a', $url); $find = array('ú', 'ù', 'û', 'Ú', 'Ù', 'Û'); $url = str_replace ($find, 'u', $url); $find = array('ü', 'Ü'); $url = str_replace ($find, 'ue', $url); $find = array('ß'); $url = str_replace ($find, 'ss', $url); $find = array('ç'); $url = str_replace ($find, 'c', $url); $find = array('/[^a-z0-9\-<>]/', '/[\-]+/', '/<[^>]*>/'); $repl = array('', '-', ''); $url = preg_replace ($find, $repl, $url); $url = str_replace ('--', '-', $url); return $url; } |
||
![]() |
![]() |
![]() |
#4 | |||
|
||||
Mycket flitig postare
|
1. Använd mb_string om du har utf-8 som teckenuppsättning.
2. Det verkar som du använder dig av en onödigt omständig metod - vad behöver du strängen till? För de flesta saker som behövs så finns det färdiga php-funktioner (exempelvis urlencode() för att använda strängar i länkar och htmlentities() för att ta bort otillåtna tecken i xml), annars brukar det gå att lösa med ett regexp-uttryck. |
|||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Flitig postare
|
matine: Jag tänkte använda strängen till att skapa URLer att använda vid en URL rewrite implementering. Ska ta topic för ett inlägg/ämne som namn på URL och sedan lägga på ID för inlägg för att skapa hela URLen. Det funkar nu, men ser snyggare ut om specialtecknen ersätts att tecken som inte omvandlas till %-tecken i URLen. Typ: Ch%C3%A1vez%E2%80%99s ska vara Chávez's
|
||
![]() |
![]() |
![]() |
#6 | |||
|
||||
Mycket flitig postare
|
Ja, om du helt vill ersätta bokstäver med prickar med motsvarande bokstav utan prickar så finns det nog ingen funktion för just detta i php… Du får nog använda mb_string-funktionerna t.ex. mb_strtolower eller preg_replace, de vanliga strängfunktionerna mäktar inte utf-8.
Tänk på att det finns många tusen tecken i utf-8 så att träffa alla är nog inte så lätt, en bra början är att utesluta och inte godkänna vissa tecken redan vid inmatningen. Med preg_replace kan du ju göra t.ex. $new_string = preg_replace('/[äåá]/ui',"a",$string); men det blir ju ganska omfattande och krävande… Om du studerar unicode-tabellerna så kan du leta upp "ranges" som minskar ner jobbet lite, t.ex. 0x0100 till 0x0105 är olika former av bokstaven a. http://unicode.org/charts/PDF/U0100.pdf Enklast är kanske att låta php med mb_string konvertera från uft-8 till iso-8859-1 så att de flest "osvenska" tecknen försvinner och sedan bara ha runt 250 tecken att behöva behandla… |
|||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Bara ett inlägg till!
|
Om jag inte minns helt fel så kan du, i PHP, använda en funktion där du specificierar endast vilka tecken som får finnas i en sträng och så plockar den bort alla som inte är tillåtna -- någon som kan sparka honom i rätt riktning till denna funktion?
|
||
![]() |
![]() |
![]() |
#8 | |||
|
||||
Mycket flitig postare
|
Citat:
$str = preg_replace('/[- \pL]/u',"",$str); //tar bort allt utom mellanslag, bindestreck och latinska bokstäver $str = preg_replace(array('/[åäá?à]/ui','/ö?óò/ui','/é???è/ui'),array("a","o","e"),$str); //byter ut alla oönskade tecken Särskilt effektivt blir det inte men om det bara behöver göras en gång när artikeln sparas så är det inget problem. Edit: tydligen klarar inte heller forumet av att visa vissa tecken - frågetecknen ska naturligtvis vara a, o och e med olika hakar och streck. |
|||
![]() |
![]() |
![]() |
#9 | |||
|
||||
Mycket flitig postare
|
Var lite trött igår. Det första regexp:et gör det omvända mot vad man önskar…
[- \pL] ska naturligtvis vara [^- \pL] mindphaser: meddela om det inte fungerar, jag kanske missat ytterligare något vid den snabba sammanställningen… |
|||
![]() |
![]() |
![]() |
#10 | ||
|
|||
Supermoderator
|
Tycker inte du bör ersätta alla möjliga tecken i utf-8, det blir lite väl tungt och förmodligen onödigt eftersom jag inte kan tänka mig att majoriteten av dessa kan dyka upp i dina länkar. Lista ut vilka som kan tänkas dyka upp och lägg sedan till när det dyker upp nya. Urlencode fungerar ju annars bra även om det inte alltid ser snyggt ut...
Forumet kör inte utf-8...
__________________
Full-stack developer, free for smaller assignments |
||
![]() |
![]() |
Svara |
|
|