webForumDet fria alternativet

case-insensitive contains() med XPath

2 svar · 337 visningar · startad av plup

plupMedlem sedan sep. 200593 inlägg
#1

använder följande för att hämta ut info ur en xml när man söker ($searchquery).

$params = $xpath->query("//item" . ( $searchquery ? "[contains(., '" . $searchquery . "')]" : '' ) . "[position()>(last()-" . $limitEnd . ") and position()<(last()-" . $limitStart . ")]");

det egentligen enda intressanta(?) för problemet är:

contains(., '" . $searchquery . "')

sökningar har funkat utmärkt tills alldeles nyligen då jag kom på att contains() funktionen i XPath är case-sensitive.

jag vill att sökningarna ska vara case-insensitive.

hur göra? kan nån hjälpa mig.

har sett lite nånstans att man kan translate()'a alfabetet versaler-gemener, men har inte fått det att funka + att det är ett riktigt fulhack. men det är klart att ett fungerande fulhack är bättre än ingen funktion alls.

plupMedlem sedan sep. 200593 inlägg
#2
$params = $xpath->query("//item" . ( $searchquery ? "[contains(translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'), '" . strtolower ($searchquery) . "')]" : '' ) . "[position()>(last()-" . $limitEnd . ") and position()<(last()-" . $limitStart . ")]");

Funkar tillräckligt bra för att jag ska kunna glömma bort problemet nu, (för att förmodligen behöva ta itu med det på riktigt i framtiden, jaja senare problem).

det är utan tvekan den längsta kod-rad i min programmeringshistoria :e

plupMedlem sedan sep. 200593 inlägg
#3

Någon som kan förklara varför

contains(lower-case('.'), '" . strtolower ($searchquery) . "')

inte fungerar?

130 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)