Code: Select all
strstrHier ist der Code:
Code: Select all
file_put_contents(
"logs.txt",
"stristr(\"".$value["value"]."\", \"".$data["q"]["fieldquery"]."\") returned: ".PHP_EOL.
print_r(stristr((string)$value["value"], (string)$data["q"]["fieldquery"]) ? "TRUE" : "FALSE", TRUE).PHP_EOL.PHP_EOL,
FILE_APPEND );

Dieser Code wird zum Suchen verwendet, durchsucht alle Felder und soll eine JSON-Liste aller Einträge zurückgeben, die mit der Suchabfrage übereinstimmten, aber er Aufgrund des oben genannten Problems wird immer ein leerer JSON-Code zurückgegeben. Das Ersetzen von stristr durch preg_match löst alles. Danke!
EDIT: preg_match code:
Code: Select all
$modifier = "i";
if( $key == (int)$data["q"]["fieldid"] && preg_match("/".(string)$data["q"]["fieldquery"]."/".$modifier, (string)$value["value"]) ) {
BEARBEITEN 2 10 15 25:
Beim heutigen Versuch, das Problem zu reproduzieren, habe ich festgestellt, dass nur die Funktionen, bei denen die Groß-/Kleinschreibung nicht berücksichtigt wird, nicht funktionieren. Ich werde die Hex-Ansicht des Protokolls mit den Markierungen + anhängen UTF8-Symbol-Hexcodes für Referenz
Verwendeter Code: (stristr/strstr jeweils gegen stripos/strpos ausgetauscht, um beide Varianten zu testen)
Code: Select all
function PerformSearch( $data ) {
global $sql;
$iMatched = 0;
$out = array();
$p = new CProdMgr();
$retn = $p->GetAllProducts();
if( $data["q"]["case"] ) $posfunc = 'strstr';
else $posfunc = 'stristr';
// ($posfunc((string)$data["q"]["fieldquery"], (string)$value["value"]) !== FALSE)
if( !$data["q"]["case"] ) $modifier = "";
else $modifier = "i";
$bLookingInAllFields = !( $data["q"]["fieldid"] != -1 );
for( $i = 0; $i < count($retn); $i++ ) {
unset( $json );
$json = json_decode( $retn[$i]["data"], TRUE );
if( !empty($data["q"]["fieldquery"]) ) {
foreach( $json as $key => $value ) {
$res = $posfunc( (string)$value["value"], (string)$data["q"]["fieldquery"] );
file_put_contents( "logs.txt",
"Looking for ". $data["q"]["fieldid"]." that has ". $data["q"]["fieldquery"].PHP_EOL.
"posfunc \"".$posfunc."\" result (comparing \"".$data["q"]["fieldquery"]."\" against \"".$value["value"]."\", returned ".($res !== FALSE ? "TRUE" : "FALSE").PHP_EOL.PHP_EOL,
FILE_APPEND );
if( ($key == (int)$data["q"]["fieldid"] || $bLookingInAllFields) && ($posfunc((string)$value["value"], (string)$data["q"]["fieldquery"]) !== FALSE) /*preg_match("/".(string)$data["q"]["fieldquery"]."/".$modifier, (string)$value["value"])*/ ) {
$iMatched++; break;
}
}
} else $iMatched++;
// ...
Protokolle: https://drive.google.com/file/d/1d67qFj ... sp=sharing
8 TXTs, jeder ~10 Megabyte
Mobile version