Har ett adminscript där användaren oftast kopierar det som ska in i databasen från en annan sida. Upptäckt att han väldigt lätt får med ett eller flera mellanslag i början eller slutet av det han kopierar. Hur får man bort mellanslagen redan här?
mellanslag
12 svar · 653 visningar · startad av tanten
Tack!
Jag använder alltid trim() på värden ifrån formulär innan jag lägger in i databasen.
T.ex om du kollar om ett fält inte är ifyllt med empty($_POST['namn']) så returnerar den att man har fyllt i någonting även om det bara är ett mellanslag man har skrivit.
Så jag kör trim() på alla variabler så här innan jag kontrollerar om fälten är tomma och lägger in i databasen:
// rensa bort blanksteg i början och slutet
foreach($_POST as $key => $val){
$_POST[$key] = trim($val);
}
Eftersom det är travtränare det handlar om och att de nästan uteslutande kopierar från en sida som denna när de ska mata in en häst de har i träning i databasen. http://www.travsport.se/shestinfo?kommando=visaHerstamning&hestId=80646
Är det då något mer jag bör tänka på som kan bli fel. Hitentills har det bara varit detta med mellanslag som orsakat problem när en bild ska visas. Bilden döps efter hästens namn och det har då hänt att det blivit t.ex.<img src="jarvso .jpg"> med mellanslaget före . Men det blev bra med trim
Alla tips mottas tacksamt så det blir rätt från början.
Mamma, pappa, morfar kopieras in med stora bokstäver, vilket kanske inte är så bra t.ex. Kan det bli problem?
strtolower konverterar alla tecken till downcase vilket är standard för URL och filnamn på teh inter net
Tar upp den här tråden igen.
Har inte fått det att fungera om en häst heter t.ex. Bacardi B.M.W.
$pappa = trim(ucwords(strtolower($_POST['pappa'])));
Det blir då små bokstäver av m.w.
Finns det något sätt att få det att fungera...
Du får nog göra en funktion som med regex kollar efter en punkt följt av en bokstav och som ändrar bokstaven till uppercase.
Är inte så bra på RegEx så här är en funktion som använder str_replace istället.
function changeToUpper($word) {
foreach (range('a', 'z') as $letter) {
$letter = '.' . $letter;
$word = str_replace($letter, strtoupper($letter), $word);
}
return $word;
}
$pappa = changeToUpper(trim(ucwords(strtolower($_POST['pappa']))));
Tack så Jätte mycket. Det fungerade jättebra.
Satt och läste i manualen när ditt svar kom och då hittade jag andra namnkombinationer som kanske kommer dyka upp i tabellen. Sådant som McDonand O'Neil.
Men det ser ut som de flesta använder str_replace för det så jag får jobba vidare med det .
Tack än en gång...
Ja, det går ju att bygga på med fler str_replace i funktionen
function changeToUpper($word) {
foreach (range('a', 'z') as $letter) {
// byt ut alla förekomster av .* till uppercase
$letter1 = '.' . $letter;
$word = str_replace($letter1, strtoupper($letter1), $word);
// byt ut alla Mc* till uppercase t.ex McD
$letter2 = 'Mc' . $letter;
$word = str_replace($letter2, 'Mc' . strtoupper($letter), $word);
// byt ut alla '* till uppercase t.ex 'N i O'Neil
$letter3 = '\'' . $letter;
$word = str_replace($letter3, strtoupper($letter3), $word);
}
return $word;
}
Ja jisses... finns ju hur mycket som hellst att str_replace:a men väldigt lätt att göra fel.
Men kul att testa... Lindy's Crown skulle ju se lite halvroligt ut med stort S.
Skriv rätt från början är nog det jag skulle vilja säga till användarna, det finns aldeles för många kombinationer som ska skrivas ut antingen si eller så ... :-)
Mc däremot tar jag med... Tack!