Я не знаю, где именно моя проблема, надеюсь, вы можете мне помочь. 2 часа поиска не помогли. :/Странное поведение preg_replace превращает символы в числа
Я извлекаю строку из базы данных простым SELECT string FROM table
. Это то, что я получаю, когда я повторяю это:
echo $string; -> some-string
echo htmlspecialchars($string); -> some-string
Это уже странно, я думаю, потому что если я изменить запрос к
SELECT string FROM table WHERE string LIKE '%some-string%';
используя знак минус на клавиатуре, то результат пусто. Я пробовал разные наборы символов («SET NAMES ...»), но здесь ничего не изменилось. Поэтому я придерживаюсь «SET NAMES utf8», мой PHP-документ также кодируется UTF-8. Кто-нибудь знает, что моя проблема?
Что происходит дальше, еще более странно:
echo preg_replace("/[^0-9a-zA-Z]/", "+", $string);
Это должно заменить все не алфавитно-цифровой символ со знаком плюс, не так ли? Таким образом, мое ожидание будет some+string
но эхо:
some++45+string
Что я здесь отсутствует? Любая помощь высоко ценится.
Что произойдет, если вы попробуете 'SELECT string FROM table WHERE string LIKE '% some - string%';'? –
Это правильно, так как '& #' перед '45' превращается в' ++ 'и'; 'после' 45' превращается в '+'. Итак, финальная строка становится: 'some ++ 45 + string' – anubhava
Я считаю, что вы должны использовать' preg_replace ("/ [^ a-zA-Z] + /", "+", $ string); 'get' some + string' – anubhava