Есть html-форма, юзер вводит строку st, строка отправляется на сервер и php-скриптом строка st записывется в БД (SQL). Нужно, чтобы у юзера была возможность в этой строке в качестве символов использовать такие виды кавычек и апостроф: ’ - ’ ' - ' ` - ` Вопросы: 1. Как правильно принять такую строку на сервере и записать ее в БД? 2. Как правильно потом брать такую строку из БД и выводить в браузере и в полях форм? 3. Как правильноо должна выглядеть проверка строки на наличие этих символов, если сейчас проверка выглядит так (допустимые символы): Код (Text): preg_match('/^[\sa-z_\-\\\]{0,50}$/' , $st) ;
1. через https://php.net/manual/ru/mysqli-stmt.bind-param.php или https://php.net/manual/ru/mysqli.real-escape-string.php 2. https://php.net/manual/ru/function.htmlspecialchars.php 3. как вариант php regex ascii range, только зачем проверять?
вот и показывай как пытался, чего ожидал и что увидел в итоге. эта функция придумана для экранирования символов которые могут поломать запрос. если она у тебя не заработала значит ты её не так готовил.
Начнем с того, как правильно должна выглядеть проверка строки на наличие этих символов, если сейчас проверка выглядит так (допустимые символы): Код (Text): preg_match('/^[\sa-z_\-\\\]{0,50}$/' , $st) ; ?
Непонятно вот, нужна вам помощь или нет. Чтобы вам что-то подсказать, знающие люди просят одно, вы же уходите на "нет" и снова талдычите своё. Отсюда вывод: что вы не сильно то и хотите, чтобы вам помогали.
mr.akv, Вы о чем? Конкретный вопрос - как проверить наличие кавычек? По идее в preg_match кавычки должны вставляться в экранированном виде с бэк-слешем. Если да, то это только для кавычек или для апострофа тоже? Или апостроф вставлять через код символа? Если да, то как? denis01 , проверять нужно потому, что мне так нужно. Вот такие у меня ограничения. Что тут странного/непонятного/неправильного?
действительно. как она должна выглядеть? в данном случае наличие любого символа из списка разрешенных а так же их полное (опаньки) отсутствие - считается валидным. то есть проверка в данном случае просто для запуска компилятора регулярных выражений и поиска не важно чего. варианты исправления?
Ganzal, сейчас проверка не просто "для запуска компилятора регулярных выражений и поиска не важно чего", а для проверки того, что строка от 0 до 50 символов, в которой есть только разрешенные символы (т.е. нет других кроме указанных). Строка "d_a y" пройдет такую проверку, т.е. Код (Text): preg_match('/^[\sa-z_\-\\\]{0,50}$/' , "d_a y") == True а строка "day2" не пройдет, т.е. Код (Text): preg_match('/^[\sa-z_\-\\\]{0,50}$/' , "day2") == False Или нет?
не пройдет - двойка в конце. я в первом случае скорее всего тоже не увидел бакса. бывает. ну тогда получается ответ уже есть - вот эта регулярка и не допускает апострофа, кавычки и грависа.
Еще раз повторю вопрос: а как сделать так, чтобы ДОПУСКАЛА? Чтобы среди разрешенных символов были все апострофы и кавычки (те, что в первом посте)???
перечислить их в перечислении допустимых символов. Добавлено спустя 8 минут 4 секунды: ^[\sa-z_\-\\`'"’]{0,50}$ похоже работает
о мои боги. с кем приходится работать... ну покажи же как твоя фантазия встраивает эту регулярку в пхп файл
Было так: Код (Text): $res = preg_match('/^[\sa-z_\-\\\]{0,50}$/' , $st) ; Теперь с апострофами и кавычками пробовал так: Код (Text): $res = preg_match('/^[\s`'"’a-z_\-\\\]{0,50}$/' , $st) ; и так: Код (Text): $res = preg_match('/^[\s`'’a-z_\-\\\]{0,50}$/' , $st) ; и так: Код (Text): $res = preg_match('/^[\s\`\'\’a-z_\-\\\]{0,50}$/' , $st) ;
а подумать не пробовал? если у тебя пхп-строка обрамлена одинарной кавычкой то в регулярке нужно экранировать одинарную кавычку чтоб на ней именно пхп не "закончил" строку и ты не получил ошибку разбора. двойкая кавычка и гравис не ломают строку поэтому не должны экранироваться ни в рамках строки пхп ни в рамках регулярного выражения. то есть достаточно примерно так: Код (Text): '/^[\sa-z_\-\\`\'"’]{0,50}$/'
слух, без обид но ты рукожопо копипастишь. я прям даже не знаю на каком языке с тобой разговаривать надо. дана строка которую нужно тупо вставить в функцию. и ты все равно умудряешься вставить так чтоб не работало. брось программирование. ты вообще не понимаешь. ранее ты уже показал что ты пытаешься везде везде эскейпа напихать толком не понимая надо ли оно вообще там. метод высоконаучного тыка? Код (PHP): <?php $re = '/^[\sa-z_\-\\`\'"’]{0,50}$/'; $ta = array( 'abc' => 'pass', 'ab\'c' => 'pass', 'ab`c' => 'pass', 'ab"c' => 'pass', 'ab’c' => 'pass', 'abc#' => 'fail', 'abc2' => 'fail', ); foreach($ta as $t=>$e) { $r = preg_match($re,$t) ? 'pass' : 'fail'; echo sprintf("T=%s\n exp=%s, act=%s\n%s\n\n",$t, $e, $r, $e==$r?'PASS':'FAIL'); } Код (Text): T=abc exp=pass, act=pass PASS T=ab'c exp=pass, act=pass PASS T=ab`c exp=pass, act=pass PASS T=ab"c exp=pass, act=pass PASS T=ab’c exp=pass, act=pass PASS T=abc# exp=fail, act=fail PASS T=abc2 exp=fail, act=fail PASS я в принципе не удивлюсь если ты скопипастишь и увидишь результат отличный от данного.
и где это я лишних эскейпов натыкал? и вот прикинь, весь твой php код скопипастил, а все равно выдает Parse error: syntax error, unexpected ']' in *** on line 2 т.е. что-то в строчке $re = '/^[\sa-z_\-\\`\'"’]{0,50}$/'; не так. Заэкранировал я последний символ: $re = '/^[\sa-z_\-\\`\'"\’]{0,50}$/'; стало ругаться на 'ab’c' => 'pass', поменял это на "ab’c" => 'pass', и все заработало. Такое впечатление что у меня апостроф (’) воспринимается так же, как и одинарная кавычка ('). В связи с этим вопрос: можно ли в preg_match символ задавать своим кодом? Если да, то как?
походу именно при копипасте апостроф превращается в кавычку. ну не суть. так можно ли в preg_match символ задавать своим кодом? Если да, то как?
да, через код из таблицы ASCII https://php.net/manual/ru/regexp.reference.unicode.php http://www.endmemo.com/unicode/u00b4.php http://www.unicode.org/charts/PDF/U0080.pdf