🐘🎓📝 PHP Library providing an easy way to spellcheck multiple sources of text by many spellcheckers

Overview

PHP-Spellchecker

PHP-Spellchecker

Build Status Code coverage Code coverage PHP-Spellchecker chat room License

Check misspellings from any text source with the most popular PHP spellchecker.


About

PHP-Spellchecker is a spellchecker abstraction library for PHP. By providing a unified interface for many different spellcheckers, you’re able to swap out spellcheckers without extensive rewrites.

Using PHP-Spellchecker can eliminate vendor lock-in, reduce technical debt, and improve the testability of your code.

Features

PHP-Spellchecker is a welcoming project for new contributors.

Want to make your first open source contribution? Check the roadmap, pick one task, open an issue and we'll help you go through it 🤓 🚀

Install

Via Composer

$ composer require tigitz/php-spellchecker

Usage

Check out the documentation and examples

Using the spellchecker directly

You can check misspellings directly from a PhpSpellCheck\SpellChecker class and process them on your own.

<?php
// if you made the default aspell installation on you local machine
$aspell = Aspell::create();

// or if you want to use binaries from Docker
$aspell = new Aspell(new CommandLine(['docker','run','--rm', '-i', 'starefossen/aspell']));

$misspellings = $aspell->check('mispell', ['en_US'], ['from_example']);
foreach ($misspellings as $misspelling) {
    $misspelling->getWord(); // 'mispell'
    $misspelling->getLineNumber(); // '1'
    $misspelling->getOffset(); // '0'
    $misspelling->getSuggestions(); // ['misspell', ...]
    $misspelling->getContext(); // ['from_example']
}

Using the MisspellingFinder orchestrator

You can also use an opinionated MisspellingFinder class to orchestrate your spellchecking flow:

PHP-Spellchecker-misspellingfinder-flow

Following the well-known Unix philosophy:

Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface.

<?php
// My custom text processor that replaces "_" by " "
$customTextProcessor = new class implements TextProcessorInterface
{
    public function process(TextInterface $text): TextInterface
    {
        $contentProcessed = str_replace('_', ' ', $text->getContent());

        return $text->replaceContent($contentProcessed);
    }
};

$misspellingFinder = new MisspellingFinder(
    Aspell::create(), // Creates aspell spellchecker pointing to "aspell" as it's binary path
    new EchoHandler(), // Handles all the misspellings found by echoing their information
    $customTextProcessor
);

// using a string
$misspellingFinder->find('It\'s_a_mispelling', ['en_US']);
// word: mispelling | line: 1 | offset: 7 | suggestions: mi spelling,mi-spelling,misspelling | context: []

// using a TextSource
$inMemoryTextProvider = new class implements SourceInterface
{
    public function toTexts(array $context): iterable
    {
        yield new Text('my_mispell', ['from_source_interface']);
        // t() is a shortcut for new Text()
        yield t('my_other_mispell', ['from_named_constructor']);
    }
};

$misspellingFinder->find($inMemoryTextProvider, ['en_US']);
//word: mispell | line: 1 | offset: 3 | suggestions: mi spell,mi-spell,misspell,... | context: ["from_source_interface"]
//word: mispell | line: 1 | offset: 9 | suggestions: mi spell,mi-spell,misspell,... | context: ["from_named_constructor"]

Roadmap

The project is still in its initial phase, requiring more real life usage to stabilize its final 1.0.0 API.

Global

  • Add a CLI that could do something like vendor/bin/php-spellchecker "misspell" Languagetools EchoHandler --lang=en_US
  • Add asynchronous mechanism to spellcheckers.
  • Make some computed misspelling properties optional to improve performance for certain use cases (e.g., lines and offset in LanguageTools).
  • Add a language mapper to manage different representations across spellcheckers.
  • Evaluate strtok instead of explode to parse lines of text, for performance.
  • Evaluate MutableMisspelling for performance comparison.
  • Wrap Webmozart/Assert library exceptions to throw PHP-Spellchecker custom exceptions instead.
  • Improve the Makefile.

Sources

  • Make a SourceInterface class that's able to have an effect on the used spellchecker configuration.
  • League/Flysystem source.
  • Symfony/Finder source.

Text processors

  • Markdown - Find a way to keep original offset and line of words after stripping.
  • Add PHPDoc processor.
  • Add HTML Processor (inspiration).
  • Add XLIFF Processor (inspiration).

Spell checkers

Handlers

  • MonologHandler
  • ChainedHandler
  • HTMLReportHandler
  • XmlReportHandler
  • JSONReportHandler
  • ConsoleTableHandler

Tests

  • Add or improve tests with different text encoding.
  • Refactor duplicate Dockerfile content between PHP images.

Versioning

We follow SemVer v2.0.0.

There still are many design decisions that should be confronted with real-world usage before thinking about a v1.0.0 stable release:

  • Are TextInterface and MisspellingInterface really useful?
  • Is using generators the right way to go?
  • Should all the contributed spellcheckers be maintained by the package itself?
  • How to design an intuitive CLI given the needed flexibility of usage?
  • Is the "context" array passed through all the layers the right design to handle data sharing?

Testing

Spell checkers come in many different forms, from HTTP API to command line tools. PHP-Spellchecker wants to ensure real-world usage is OK, so it contains integration tests. To run these, spellcheckers need to all be available during tests execution.

The most convenient way to do it is by using Docker and avoid polluting your local machine.

Docker

Requires docker and docker-compose to be installed (tested on Linux).

$ make build # build container images
$ make setup # start spellcheckers container
$ make tests-dox

You can also specify PHP version, dependency version target and if you want coverage. Coverage is only supported by PHP 7.2 for now.

$ PHP_VERSION=7.2 DEPS=LOWEST WITH_COVERAGE="true" make tests-dox

Run make help to list all available tasks.

Locally

Todo

Environment variables

If spellcheckers execution paths are different than their default values (e.g., docker exec -ti myispell instead of ispell) you can override the path used in tests by redefining environment variables in the PHPUnit config file.

Contributing

Please see CONTRIBUTING.

Credits

License

The MIT License (MIT). Please see license file for more information.

Logo: Elements taken for the final rendering are Designed by rawpixel.com / Freepik.

Comments
  • Process with command

    Process with command "'hunspell' '-a' '-d' 'en_US'" has failed running with exit code 1(General error)

    Upon trying the first example in the docs "Using the spellchecker directly" I get the following error Process with command "'hunspell' '-a' '-d' 'en_US'" has failed running with exit code 1(General error)

    $hunspell = Hunspell::create();
    
    // en_US hunspell dictionary is available
    $misspellings = $hunspell->check('mispell', ['en_US'], ['from_example']);
    foreach ($misspellings as $misspelling) {
        $misspelling->getWord(); // 'mispell'
        $misspelling->getLineNumber(); // '1'
        $misspelling->getOffset(); // '0'
        $misspelling->getSuggestions(); // ['misspell', ...]
        $misspelling->getContext(); // ['from_example']
    }
    

    Upon checking installed dictionaries from Laravel I get the following error which is strange because from command line it works(see last code block for hunspell -D Process with command "'hunspell' '-D'" has failed running with exit code 1(General error)

    $hunspell = Hunspell::create();
    
    $hunspell->getSupportedLanguages();
    

    I tried first with Aspell and got the same error.

    Do you have any pointers as to where the issue might be coming from?

    Linux Mint 20 PHP 7.4 Laravel 6.20.16 I found that both Aspell and Hunspell were already installed on Linux mint.

    $ aspell -v
    @(#) International Ispell Version 3.1.20 (but really Aspell 0.60.8)
    $ hunspell -v
    @(#) International Ispell Version 3.2.06 (but really Hunspell 1.7.0)
    
    $ hunspell -D
    SEARCH PATH:
    .::/usr/share/hunspell:/usr/share/myspell:/usr/share/myspell/dicts:/Library/Spelling:/home/USERNAME/.openoffice.org/3/user/wordbook:/home/USERNAME/.openoffice.org2/user/wordbook:/home/USERNAME/.openoffice.org2.0/user/wordbook:/home/USERNAME/Library/Spelling:/opt/openoffice.org/basis3.0/share/dict/ooo:/usr/lib/openoffice.org/basis3.0/share/dict/ooo:/opt/openoffice.org2.4/share/dict/ooo:/usr/lib/openoffice.org2.4/share/dict/ooo:/opt/openoffice.org2.3/share/dict/ooo:/usr/lib/openoffice.org2.3/share/dict/ooo:/opt/openoffice.org2.2/share/dict/ooo:/usr/lib/openoffice.org2.2/share/dict/ooo:/opt/openoffice.org2.1/share/dict/ooo:/usr/lib/openoffice.org2.1/share/dict/ooo:/opt/openoffice.org2.0/share/dict/ooo:/usr/lib/openoffice.org2.0/share/dict/ooo
    AVAILABLE DICTIONARIES (path is not mandatory for -d option):
    /usr/share/hunspell/en_CA
    /usr/share/hunspell/en_ZA
    /usr/share/hunspell/es_US
    /usr/share/hunspell/es_SV
    /usr/share/hunspell/en_AU
    /usr/share/hunspell/es_VE
    /usr/share/hunspell/es_NI
    /usr/share/hunspell/pt_PT
    /usr/share/hunspell/pt_BR
    /usr/share/hunspell/es_BO
    /usr/share/hunspell/es_PA
    /usr/share/hunspell/es_PY
    /usr/share/hunspell/es_HN
    /usr/share/hunspell/en_GB
    /usr/share/hunspell/es_CU
    /usr/share/hunspell/de_DE
    /usr/share/hunspell/de_CH_frami
    /usr/share/hunspell/es_CO
    /usr/share/hunspell/fr_CH
    /usr/share/hunspell/fr
    /usr/share/hunspell/de_DE_frami
    /usr/share/hunspell/de_AT_frami
    /usr/share/hunspell/es_PR
    /usr/share/hunspell/es_AR
    /usr/share/hunspell/de_AT
    /usr/share/hunspell/es_UY
    /usr/share/hunspell/en_US
    /usr/share/hunspell/fr_FR
    /usr/share/hunspell/fr_CA
    /usr/share/hunspell/it_CH
    /usr/share/hunspell/de_CH
    /usr/share/hunspell/ru_RU
    /usr/share/hunspell/es_ES
    /usr/share/hunspell/es_DO
    /usr/share/hunspell/fr_LU
    /usr/share/hunspell/es_GT
    /usr/share/hunspell/es_CL
    /usr/share/hunspell/es_MX
    /usr/share/hunspell/fr_BE
    /usr/share/hunspell/fr_MC
    /usr/share/hunspell/es_CR
    /usr/share/hunspell/it_IT
    /usr/share/hunspell/es_EC
    /usr/share/hunspell/es_PE
    /usr/share/myspell/dicts/fr_CH
    /usr/share/myspell/dicts/hyph_ru_RU
    /usr/share/myspell/dicts/fr_FR
    /usr/share/myspell/dicts/fr_CA
    /usr/share/myspell/dicts/fr_LU
    /usr/share/myspell/dicts/fr_BE
    /usr/share/myspell/dicts/fr_MC
    
    opened by warmwhisky 10
  • Fix incorrect capital letter in class name

    Fix incorrect capital letter in class name

    The PhpSpellcheck\Spellchecker namespace is Spellchecker with a lowercase c. The docs have it with a capital. On case-sensitive filesystems this results in a "Class doesn't exist" error as Composer can't find the file.

    opened by jacksleight 4
  • fix([ia]spell): prevent interpretation of ispell pipe-mode instructio…

    fix([ia]spell): prevent interpretation of ispell pipe-mode instructio…

    …n characters at the beginning of a line

    Description

    These changes ensure that the pipe mode of ispall/aspell does not execute unvoluntary instructions. In pipe mode lines beginning with one of these chars are instruction to the checker :

    *,&,@,#,+,!,%,^

    (as stated in http://aspell.net/man-html/Through-A-Pipe.html#Through-A-Pipe)

    Motivation and context

    if a line begins with * for instance, the rest of the line will not be spell-checked. instead it will be considered as a word to be added to the personal dictionary At best the rest of the line is a lexically valid word and the only effect is that the spell-check is not performed of this line But if it's not a valid word we have the additional effect of an error being sent to stderr.

    ex:

    $ make build 
    $ make setup
    $ docker-compose run --rm php /bin/bash
    $ printf "*Tigr, tiger, burning страх" | aspell -a --encoding=utf-8 --lang=en_US
    @(#) International Ispell Version 3.1.20 (but really Aspell 0.60.7-20110707)
    Error: The word "Tigr, tiger, burning ?????" is invalid. The character ',' (U+2C) may not appear in the middle of a word.
    

    but with the caret oat the beginning of the line:

    $ printf "^*Tigr, tiger, burning страх" | aspell -a --encoding=utf-8 --lang=en_US
    @(#) International Ispell Version 3.1.20 (but really Aspell 0.60.7-20110707)
    & Tigr 34 2: Ti gr, Ti-gr, Tiger, Tier, Tigers, Trig, Tire, Tog, Tug, Gr, Tigris, Tr, TGIF, Togo, Taiga, Toga, Trier, Togs, Tugs, Mgr, Dig, Tag, Tic, Terr, Tick, Digs, Tags, Tics, Tiger's, Tog's, Tug's, Dig's, Tag's, Tic's
    *
    *
    
    
    

    What we want IMHO is that any of these special chars to be ignored and the rest of the line is spell-checked. The text to spellcheck can contain such first chars in lines, like the * for bulleted-list in markdown. the ^ instruction is what we need here, it does exactly that, so I propose to add it at the beginning of every input lines.

    Once done we have to decrease every offset by one since the caret is taken in account by aspell to compute it.

    How has this been tested?

    I added the following lines to the TextTest::CONTENT_STUB :

    *This should be spell-checked by aspell and not interpreted as an instruction to add a word to the personal dictionary
    &this should not be interpreted either
    

    Checklist:

    Go over all the following points before making your PR:

    • [x] I have read the CONTRIBUTING document.
    • [x] My pull request addresses exactly one patch/feature.
    • [x] I have created a branch for this patch/feature.
    • [x] I have added tests to cover my changes.
    • [x] If my change requires a change to the documentation, I have updated it accordingly.

    I don't think we have to change the doc for that.

    I hope there is not too much to change, if needed I'll be happy to do the modifications.

    bug 
    opened by FSAkeneo 3
  • t() function in src/Text/functions.php prevents use with Drupal

    t() function in src/Text/functions.php prevents use with Drupal

    Drupal has a default built-in function t(). As soon as I composer require tigitz/php-spellchecker, the site stops working because we have two definitions of the function t().

    Detailed description

    It looks like this is just a shortcut for new Text() and is used only a few times, and only in examples and tests.

    Context

    Why is this change important to you? How would you use it? I would like to use this library in a Drupal project.

    How can it benefit other users? Others could too...

    Possible implementation

    Drop it - its only purpose is to save 7 key strokes. Or namespace it.

    opened by sonfd 3
  • Process with command

    Process with command "'aspell' '--encoding' 'utf-8' '-a' '--lang=en_US'" has failed running with exit code 127

    Detailed description

    when I create object of aspell its throw an exception $query = request()->input('term'); $misspellings = $aspell->check($query, ['en_US']); return response()->json($misspellings);

    • PHP 8:
    • Window 10
    • Laravel 9
    • Docker
    opened by hassanfayyaz19 2
  • Update thecodingmachine/phpstan-safe-rule requirement from v1.1.0 to v1.2.0

    Update thecodingmachine/phpstan-safe-rule requirement from v1.1.0 to v1.2.0

    Updates the requirements on thecodingmachine/phpstan-safe-rule to permit the latest version.

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • Hunspell class doesn't work in web

    Hunspell class doesn't work in web

    Detailed description

    It does not work outside of CLI. In cli hunspell someword and laravel artisan command with Hunspell::create() works fine, but in controller (http layer) it always returns empty array. Why?

    Your environment

    Ubuntu 20.04 PHP 8.0.6 Laravel 8.50

    ###Code sample

    use PhpSpellcheck\Spellchecker\Hunspell;
    
            $spell = Hunspell::create();
    
    
            $misspellings = $spell->check($this->argument('phrase'), ['ru'], ['from_example']);
            $arr = [];
            foreach ($misspellings as $misspelling) {
                $arr[$misspelling->getWord()] = $misspelling->getSuggestions();
            }
    

    How to fix that? Thanks!

    opened by Webakula 2
  • Is it supporting RTL languages or abjad characters?

    Is it supporting RTL languages or abjad characters?

    Hi, I just started testing this library for Kurdish language. but when started testing I found out that it's not supporting RTL languages. I did even test "PHP pspell" alone without this library. it was not working too. I know there's no dictionary files for Kurdish language, but I tried using custom dictionaries but it looks like none of them accept abjad characters in the first place. is there's any explanation to that please? Thanks

    opened by Xoshbin 2
  • fix: various text fixes

    fix: various text fixes

    Description

    This PR fixes a few text issues in the README:

    • spelling mistakes,
    • punctuation issues,
    • capitalization issues.

    Motivation and context

    This fix intends to clean up the README.

    How has this been tested?

    N/A

    Screenshots (if appropriate)

    N/A

    Checklist:

    Go over all the following points before making your PR:

    • [x] I have read the CONTRIBUTING document.
    • [x] My pull request addresses exactly one patch/feature.
    • [x] I have created a branch for this patch/feature.
    • [ ] I have added tests to cover my changes.
    • [ ] If my change requires a change to the documentation, I have updated it accordingly.

    If you're unsure about any of these, don't hesitate to ask. We're here to help!

    opened by sarahdayan 2
  • Update erusev/parsedown-extra requirement from ^0.7.1 to ^0.7.1 || ^0.8.0

    Update erusev/parsedown-extra requirement from ^0.7.1 to ^0.7.1 || ^0.8.0

    Updates the requirements on erusev/parsedown-extra to permit the latest version.

    Commits
    • 91ac3ff Bump version for release
    • 1ddbdec Merge pull request #144 from erusev/dev-0.8.x/fix-footnotes
    • ba0ae88 Test on modern versions of PHP
    • e9c2536 Drop hhvm
    • d884559 Bump version for dev
    • d1208f6 Utilise optional rawHtml to permit footnotes
    • 4c22769 Check for null parse result
    • 9fd3d58 Fix version compare
    • a60e9d1 correctly version compare
    • 402fed4 Merge pull request #96 from PhrozenByte/bugfix/PHPUnitTests
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 2
  • Update symfony/filesystem requirement from ^4.2 to ^4.2 || ^5.0

    Update symfony/filesystem requirement from ^4.2 to ^4.2 || ^5.0

    Updates the requirements on symfony/filesystem to permit the latest version.

    Changelog

    Sourced from symfony/filesystem's changelog.

    CHANGELOG

    5.0.0

    • Filesystem::dumpFile() and appendToFile() don't accept arrays anymore

    4.4.0

    • support for passing a null value to Filesystem::isAbsolutePath() is deprecated and will be removed in 5.0

    4.3.0

    • support for passing arrays to Filesystem::dumpFile() is deprecated and will be removed in 5.0
    • support for passing arrays to Filesystem::appendToFile() is deprecated and will be removed in 5.0

    4.0.0

    • removed LockHandler
    • Support for passing relative paths to Filesystem::makePathRelative() has been removed.

    3.4.0

    • support for passing relative paths to Filesystem::makePathRelative() is deprecated and will be removed in 4.0

    3.3.0

    • added appendToFile() to append contents to existing files

    3.2.0

    • added readlink() as a platform independent method to read links

    3.0.0

    • removed $mode argument from Filesystem::dumpFile()

    2.8.0

    • added tempnam() a stream aware version of PHP's native tempnam()
    ... (truncated)
    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 2
  • Process with command

    Process with command "aspell --encoding utf-8 -a --lang=en_US" has failed running with exit code 1 on Windows

    when I create execute of aspell its throw an exception

    $spell = Aspell::create(); $response = $spell->check('mispell', ['en_US']); logger(print_r($response, true));

    image

    image

    image

    image

    image

    PHP 8: Window 10 Laravel 9 xampp

    bug 
    opened by AmilaPriyankara 2
Releases(0.5.0)
  • 0.5.0(May 26, 2022)

    Full Changelog: https://github.com/tigitz/php-spellchecker/compare/0.4.0...0.5.0

    https://github.com/tigitz/php-spellchecker/commit/5a355bf0b71348ea175abfba22bed9dae3117461 - Fix #41 https://github.com/tigitz/php-spellchecker/commit/c3592343073dc979373ecbed1982c5ef76ff5a42 - Refactor phpstan config files to support multiple php versions

    Source code(tar.gz)
    Source code(zip)
  • 0.4.0(Jan 19, 2022)

    What's Changed

    • Support 8.1 and Symfony 6 by @tigitz in https://github.com/tigitz/php-spellchecker/pull/36

    Full Changelog: https://github.com/tigitz/php-spellchecker/compare/0.3.0...0.4.0

    Source code(tar.gz)
    Source code(zip)
  • 0.3.0(Nov 21, 2021)

    What's Changed

    • Bump PHP minimum version to 7.4 from 7.2 as it's not supported anymore
    • Update phpstan
    • Update php-cs-fixer and switch to local installation to be more up to date with latest release

    New Contributors

    • @dali-rajab made their first contribution in https://github.com/tigitz/php-spellchecker/pull/30

    Full Changelog: https://github.com/tigitz/php-spellchecker/compare/0.2.2...0.3.0

    Source code(tar.gz)
    Source code(zip)
Owner
Philippe SEGATORI
Philippe SEGATORI
A set of PSR-7 object decorators providing useful convenience methods

Slim-Http Slim PSR-7 Object Decorators Installation It's recommended that you use Composer to install this library. $ composer require slim/http This

Slim Framework 136 Sep 29, 2022
A easy way to install your basic yii projetc, we have encrypt database password in phpfile, my class with alot funtions to help you encrypt and decrypt and our swoole server install just run ./yii swoole/start and be happy!

Yii 2 Basic Project Template with swoole and Modules Yii 2 Basic Project Template is a skeleton Yii 2 application best for rapidly creating small proj

null 3 Apr 11, 2022
LODSPeaKr is a framework for creating Linked Data applications in a simple and easy way

LODSPeaKr is a framework for creating Linked Data applications in a simple and easy way. You can see several applications created using LODSPeaKr.

Alvaro Graves 31 Jun 23, 2020
SecLists is the security tester's companion. It's a collection of multiple types of lists used during security assessments

SecLists is the security tester's companion. It's a collection of multiple types of lists used during security assessments, collected in one place. List types include usernames, passwords, URLs, sensitive data patterns, fuzzing payloads, web shells, and many more. The goal is to enable a security tester to pull this repository onto a new testing box and have access to every type of list that may be needed.

Daniel Miessler 44k Jan 3, 2023
An enhanced FileInput widget for Bootstrap 4.x/3.x with file preview, multiple selection, and more features (sub repo split from yii2-widgets)

yii2-widget-fileinput The FileInput widget is a customized file input widget based on Krajee's Bootstrap FileInput JQuery Plugin. The widget enhances

Kartik Visweswaran 227 Nov 6, 2022
Lite & fast micro PHP abuse library that is **easy to use**.

Utopia Abuse Utopia framework abuse library is simple and lite library for managing application usage limits. This library is aiming to be as simple a

utopia 23 Dec 17, 2022
The package provides definition syntax. Definition is describing a way to create and configure a service or an object.

Yii Definitions The package ... Requirements PHP 7.4 or higher. Installation The package could be installed with composer: composer require yiisoft/de

Yii Software 6 Jul 15, 2022
Fast and easy PHP framework

Español | English Fácil, rápido y en español (Or should I say fast and easy?) Bienvenidos a KumbiaPHP Framework Versión 1 Manual en construcción de la

KumbiaPHP Framework 281 Jan 2, 2023
A powerful yet easy-to-use PHP micro-framework designed to help you build dynamic and robust Web applications - fast!

A powerful yet easy-to-use PHP micro-framework designed to help you build dynamic and robust Web applications - fast! Condensed in a single ~65KB file

Bong Cosca 2.6k Dec 30, 2022
A very slight PHP framework, very easy to use and integrate.

A very slight PHP framework, very easy to use and integrate.

Jerry 95 Oct 26, 2022
PhpBoot is an easy and powerful PHP framework for building RESTful/Microservices APIs.

?? tiny & fast PHP framework for building Microservices/RESTful APIs, with useful features: IOC, Hook, ORM, RPC, Swagger, Annotation, Parameters binding, Validation, etc.

tknet 656 Jan 4, 2023
TrailLamp is a lightweight, easy-to-use Php MVC framework that can be used to build web applications and REST APIs.

TrailLamp Introduction TrailLamp is a lightweight, easy-to-use Php MVC framework that can be used to build web applications and REST APIs. Installatio

Etorojah Okon 14 Jun 10, 2022
Simple, fast and secure PHP Framework with easy integration.

simple-php-framework Simple, fast and secure PHP Framework with easy integration.

winact 2 Nov 23, 2021
Lite & fast micro PHP framework that is **easy to learn**.

Utopia Framework is a PHP MVC based framework with minimal must-have features for professional, simple, advanced and secure web development.

utopia 139 Dec 30, 2022
Fast and easy PHP framework

Español | English Fácil, rápido y en español (Or should I say fast and easy?) Bienvenidos a KumbiaPHP Framework Versión 1 Manual en construcción de la

KumbiaPHP Framework 280 Dec 26, 2022
Easy to use, fast extendable small PHP Framework, like the one you ever missed. The skeleton-APP

About Tufu-Framework Easy to use, fast extendable PHP Framework, like the one you ever missed. Features included such as: Twig and extensions. Fast ro

Giacomo Barbalinardo 0 Jul 2, 2022
Easy integration of twitters bootstrap into symfony2

MopaBootstrapBundle MopaBootstrapBundle is a collection of code to integrate twitter's bootstrap (http://twitter.github.com/bootstrap/) as easy as pos

Philipp A. Mohrenweiser 717 Dec 15, 2022
🚀 Coroutine-based concurrency library for PHP

English | 中文 Swoole is an event-driven asynchronous & coroutine-based concurrency networking communication engine with high performance written in C++

Swoole Project 17.7k Jan 8, 2023
PHP spell check library

php-speller PHP spell check library. Currently supported backends: aspell; hunspell; ispell. Installation With Composer: $ composer require mekras/php

Михаил Красильников 66 Oct 17, 2022