Это потому, что он преобразует «%» в число, и это 0.
Однако способ, которым PHP преобразует строки в числа, является чистым злом ИМХО, потому что не числовая строка не должна приводить к нулю.
Если он начинается с цифры, то php выдаст первое найденное в нем число и проигнорирует остальную часть строки. Итак:
"2 times 5 equals 10"
.. приведет к 2 при приведении к числу.
Статья в документации