Es sieht so aus, als ob str(i)pos und str(i)str beide nur dann nicht-false zurückgeben, wenn die Zeichenfolgen gleich siPhp

PHP-Programmierer chatten hier
Anonymous
 Es sieht so aus, als ob str(i)pos und str(i)str beide nur dann nicht-false zurückgeben, wenn die Zeichenfolgen gleich si

Post by Anonymous »

Code: Select all

strstr
und strpos (und ihre beiden Alternativen ohne Berücksichtigung der Groß- und Kleinschreibung) geben nur dann nicht FALSE zurück, wenn beide Argumente (Strings) gleich sind. In jedem anderen Fall wird false zurückgegeben (sei es, dass die Nadel im Heuhaufen IST oder nicht). />PS: Beim Testen von str(i)pos habe ich in der Eingabezeichenfolge nicht die Abfragen eingegeben, die bei Index 0 beginnen würden.
Hier 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 );
Und das Protokoll:
Image

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"]) ) {
Und ich wiederhole hier einfach noch einmal, dass ich einfach den Funktionsnamen ersetzt und die Schrägstriche durch den Modifikator hinzugefügt habe, nichts anderes wurde geändert und es hat funktioniert
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++;
// ...
Hier ist die Hex-Ansicht der Datei. Geben Sie hier die Bildbeschreibung ein
Protokolle: https://drive.google.com/file/d/1d67qFj ... sp=sharing
8 TXTs, jeder ~10 Megabyte

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post