diff --git a/README.md b/README.md index ebf82379..14b2a2b7 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,17 @@ Read the documentation here: [https://typesense.org/api/](https://typesense.org/ Here are some examples that walk you through how to use the client: [doc/examples](examples) +### Escaping filter values + +Use `Typesense\FilterBy::escapeString()` to safely use string values in `filter_by`: + +```php +use Typesense\FilterBy; + +$filterValue = "The 17\" O'Conner && O`Series \n OR a || 1%2 book? (draft), [alpha]"; +$filterBy = 'tags:=' . FilterBy::escapeString($filterValue); +``` + ## Compatibility | Typesense Server | typesense-php | diff --git a/src/FilterBy.php b/src/FilterBy.php new file mode 100644 index 00000000..9fba16a8 --- /dev/null +++ b/src/FilterBy.php @@ -0,0 +1,11 @@ +assertSame( + "`The 17\" O'Conner && O\\`Series \n OR a || 1%2 book? (draft), [alpha]`", + $escapedFilterValue + ); + } + + public function testEscapesMultipleBackticksWithinAFilterString(): void + { + $escapedFilterValue = FilterBy::escapeString('`left` and `right`'); + + $this->assertSame('`\\`left\\` and \\`right\\``', $escapedFilterValue); + } +}