This worked fine on my system:
find . -name "*.html" -type f -printf '"%p"\n' | xargs grep -ls 'string'
That command assumes none of your files have a double quote in them. If you do, then you'll run into similar problems as you did originally (mismatched quotes).