$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'") or die(mysql_error());
while($row = mysql_fetch_array($result))
{
echo $row['FirstName'];
}
Иногда подавление запроса как @mysql_query(your query);
Я смог воспроизвести это поведение с помощью Vista и Cygwin 1.7.0.
Две обратные косые черты становятся одной обратной косой чертой в оболочке, которая затем в sed ускользает от косой черты который является средним разделителем.
\\/ -> \/ (which makes the forward slash a regular character instead of a delimiter)
Три из них: первые два становятся едиными в оболочке, которые затем выходят из третьего в sed
\\\/ -> \\/
. Четыре: каждая пара становятся одиночными в оболочке, а затем первый результат уступает второму в sed
\\\\/ -> \\/
Edit:
О, я забыл сказать, что как одинарные кавычки, так и двойные кавычки работали то же самое для меня (cmd.exe
не делает различия, которые делает Bash и др.).
Ваша оболочка (возможно, bash) делает свое собственное экранирование, и это вас путает. Вы можете использовать команду echo, чтобы увидеть, что передается, или легко написать специальную программу (обычно называемую «showargs» или аналогичную):
$ echo "s/\\\/\//" s/\\/\// $ echo "s/\\/\//" s/\/\//
Вы также можете использовать одинарные кавычки, которые иначе говоря, в bash.
Пожалуйста, покажите пример того, что у вас есть в будущем. в sed, скажем, вы хотите заменить «\
» на трубу (|), например
$ cat file
asklfja \ asf
$ sed 's/\\/|/g' file
asklfja | asf
$ sed 's%\\%|%g' file #using different delimiter
asklfja | asf
, вам просто нужно уйти от нее один раз.
Изменить: к примеру @ OP, поскольку вы используете cmd.exe, а не bash / ksh, cmd.exe не любит одиночные кавычки. Я не могу создать ваш сценарий. Это работает для моего GNU sed на окнах, используя 2 слэша
, например
C:\test>echo "sample_input\whatever" | sed "s/\\/\//"
"sample_input/whatever"
В моей версии CYGWIN он работает, как говорит оригинальный плакат, но работает по-другому (обычно), если я использую одинарные кавычки.
$ echo "sample_input\whatever" | sed 's/\\/\//' sample_input/whatever
$ echo "sample_input\whatever" | sed "s/\\/\//" sed: -e expression #1, char 7: unterminated `s' command
Hmmm ..
Это связано с правилом синтаксического анализа строки sh
с двумя кавычками.
Posix указывает, как sh
анализирует строки с двойными кавычками.
Обратная косая черта сохраняет свое особое значение как escape-символ (см. Escape Символ (обратная косая черта)), только если за ним следует один из следующих символов: $ `" \
blockquote>Другими словами,
sh
оставляет обратную косую черту, за которой следуют символы, отличные от символов $ '".Итак, если
sh
встречает строку с двойными кавычкамиsed "s/\\\/\//"
,sh
анализирует ее следующим образом.
- Первые два
\\
изменяется на\
. Поскольку за первым\
следует второй\
.- Третий и четвертый
\
все еще остаются в строке. За ними следуют/
, которые не являются особыми в строках с двойными кавычками.После pasring
sh
передает строкуs/\\/\//
вsed
, которая заменяет первое появление\
на/
.С теми же рассуждениями, когда
sh
встречает строку,"sed s/\\\\/\//"
,sh
передает/\\/\//
вsed
, что также заменяет первое появление\
на/
.
Замена одной обратной косой черты двумя на моем Cygwin требует этого выражения:
sed -e "s | \\ | \\\\ | g"
Я предполагаю, что вы предполагаете \\\n
или \\\t
в качестве трех обратных косых черт, но на самом деле его 2 обратные косые черты и другие паттерны
backslash \\
newline \n
tab \t
также могут /
s/.../
, /
используется для открытых и закрытых частей.
, поэтому /\\\/\//
будет \\ + \/ + \/
в соответствии с вашим обновленным примером