比较字符串的含义,而不是内容

I have a SQL table which contains title and author name of books and all the titles and author must be unique that means repetition is not allowed.

But I have issue, if I will enter author as A.K. Pathak and A K Pathak ...both are same, but SQL is taking them as different and if I will enter title as "very hungry caterpillar" and "the very hungry caterpillar" both are same, but SQL is taking as different.

Is there any PHP function to solve this or any js function?

The strings

A.K. Pathak vs A K Pathak
and
very hungry caterpillar vs the very hungry caterpillar

are the same by it's meaning BUT they are different literally as a string, ie different letters are used.
That's why the database consider them as the same string.

Do validate the input
If you need to keep them unique you have to use a validation before the string are accepted from user input.

Client side
So if those strings are written down and submitted by user you can add autocomplete input that will helps with validation by suggestion of already used terms.

Server side
Check the value by a regex that will ignore the most common differences such as dots, commas, spaces, a/the, etc. and compare new string with the one you have already in the database. I would suggest to keep both strings, ie original string, validated one in the same table for future comparison and reuse.

If you can match by other field than the title, like some unique ID or ISBN code, much much better, but if you need matching by title, you could try something crazy like this:

SELECT * FROM books
WHERE regexp_replace(title, '[^a-zA-Z]', '', 'g') 
    ILIKE '%'|| regexp_replace('$my_search', '[^a-zA-Z]', '', 'g')||'%'
OR regexp_replace('$my_search', '[^a-zA-Z]', '', 'g') 
    ILIKE '%'|| regexp_replace(title, '[^a-zA-Z]', '', 'g')||'%'
OR regexp_replace(author, '[^a-zA-Z]', '', 'g') 
    ILIKE '%'|| regexp_replace('$my_search', '[^a-zA-Z]', '', 'g')||'%'
OR regexp_replace('$my_search', '[^a-zA-Z]', '', 'g') 
    ILIKE '%'|| regexp_replace(author, '[^a-zA-Z]', '', 'g')||'%'

But this solution is NOT 100% accurate and ONLY recommended as a desperate solution.