Addslashes отображается как косая черта в php

#php #escaping

#php #экранирование

Вопрос:

У меня есть файл на моем сервере, к которому я хочу получить доступ. Имя файла является ken's book.doc

Но в моей базе данных она была сохранена как ken's book.doc

(Я исправил проблему с обратной косой чертой, но все еще испытываю проблемы с доступом к ранее загруженным файлам на сервере.

Я использовал addslashes для добавления обратной косой черты, но она отображается как: ken/'s book.doc (это прямая косая черта вместо обратной.

Я использовал:

 str_replace("'", "'", $filename);
  

тем не менее, она отображается как косая черта.

Как я могу это исправить?

Спасибо

Редактировать

Дополнительная информация: Я использую новое значение как часть ссылки. это:

 <a href="<?php echo str_replace("'", "'", $filename);?>">View</a>
  

Комментарии:

1. Какую платформу и версию php вы используете?

2. Имя файла "ken's book.doc" ? Я почему-то сомневаюсь в этом. Для меня это не имеет смысла.

3. да, исходное имя файла — ken’s book.doc кажется, magic quotes был включен, и он добавил косые черты

4. @Tomalak Имена файлов, по-видимому, могут содержать обратную косую черту в файловых системах unix, но, вероятно, их нужно заключить в кавычки. Смотрите ссылку. @Ogugua Если str_replace("'", "'", $filename); возвращает строку с косой чертой, то $filename для начала она должна была содержать косую черту.

5. @Tomalak , уверен, что косой черты нет. @Ancide, пожалуйста, добавил дополнительную информацию в мой пост

Ответ №1:

Если у вас есть имя файла, содержащее обратную косую черту на диске, я бы сначала исправил это. Ваша вторая проблема, по-видимому, не использовалась mysql_real_escape_string при сохранении этого имени файла в базе данных (почему оно оказалось там без обратной косой черты).

addslashes кстати, сам по себе косые черты не добавляются. Эта часть вашей истории не соответствует действительности. И чтобы удалить их снова, вам не понадобится изворотливый str_replace вызов, а просто stripslashes .

Фактической проблемой (после вашей правки) оказывается html-ссылка. Это просто потому, что браузеры имеют привычку превращать обратную косую черту в прямую в URL-адресах. Чтобы предотвратить это, применяйте urlencode()

  <a href="<?=urlencode(stripslashes($filename));?>">View</a>
  

Комментарии:

1. я думаю, что при извлечении данных из базы данных удаляются косые черты, которые были добавлены ранее. Я использовал addslashes, чтобы у меня было то же имя файла, что и на диске. Она добавила косые черты, но реальная проблема заключается в том, на что вы указали в своем последнем абзаце

2. База данных не удаляет обратную косую черту при извлечении. Это происходит при вставке. Для вставки материала в DB он должен быть правильно экранирован.

3. urlencode не решает мою проблему. добавлено больше забавных символов. пожалуйста, есть ли у них какой-либо другой вариант?

4. Дополнительно htmlspecialchars . В противном случае это какое-то другое обстоятельство, о котором вы не сообщили.

5. @Ogugua @mario Попробуйте rawurlencode() вместо urlencode() . urlencode() преобразует пробелы в ‘ ‘, которые, похоже, не нравятся браузерам (в фактическом URL). rawurlencode() преобразует пробелы в , что нормально.