#php #arrays #escaping
#php #массивы #экранирование
Вопрос:
В моем PHP-коде я настраиваю область, в которой пользователи могут вводить свою собственную информацию для отображения. Информация хранится в массиве, и я хочу сделать ее максимально гибкой.
Если у меня есть что-то вроде…
$myArray[]['Text'] = 'Don't want this to fail';
или
$myArray[]['Text'] = "This has to be "easy" to do";
Как бы мне избежать апострофа или кавычки в значении массива?
Спасибо
Редактировать: Поскольку существует только отношение «один к одному», я изменил свой массив на эту структуру…
$linksArray['Link Name'] ='/path/to/link';
$linksArray['Link Name2'] ='/path/to/link2';
$linksArray['Link Name2'] ='/path/to/link3';
План заключается в том, что я создаю шаблон с включаемым файлом, который содержит эти ссылки в формате, который может поддерживать кто-то другой (менее технический специалист). У них будет прямой доступ к PHP, и я боюсь, что они могут заключить одинарную или двойную кавычку в область «название ссылки» и нарушить работу системы.
Еще раз спасибо.
ВОЗМОЖНОЕ РЕШЕНИЕ:
Спасибо @Tim Cooper.
Вот пример, который сработал для меня…
$link = "http://www.google.com";
$text = <<<TEXT
Don't you loving "googling" things
TEXT;
$linksArray[$text] = $link;
Ответ №1:
Использование heredoc может быть хорошим решением:
$myArray[]['Text'] = <<<TEXT
Place text here without escaping " or '
TEXT;
Комментарии:
1. Спасибо за помощь. Я опубликовал пример, который сработал на основе вашего предложения в качестве редактирования выше.
Ответ №2:
PHP обработает эти строки должным образом при вводе. Если вы создаете строки самостоятельно, как вы показали, вы можете чередовать стили кавычек (одинарные и двойные) … как в:
$myArray[]['Text'] = "Don't want this to fail";
$myArray[]['Text'] = 'This has to be "easy" to do';
Или, если вам необходимо экранировать символы, вы используете символ перед цитатой.
$myArray[]['Text'] = 'Don't want this to fail';
$myArray[]['Text'] = "This has to be "easy" to do";
Комментарии:
1. Спасибо. Пытаюсь выполнить экранирование для человека, который может печатать на уровне кода, но не знаком с экранированием…
Ответ №3:
Если вы действительно хотите упростить i, используйте отдельный файл конфигурации в стиле INI или XML. Обычно людям проще всего редактировать INI вручную. XML хорош, если у вас действительно вложенная структура.
Комментарии:
1. I что-то по этому маршруту может быть моим единственным вариантом. Я подумываю о создании веб-интерфейса для них, чтобы просто вводить в форму значения «link» и «url», которые могут быть либо удалены в плоский файл, либо сохранены в MySQL. Спасибо за предложение.
Ответ №4:
Если вы не разрешаете пользователям вводить прямой PHP-код (вы, вероятно, этого не делаете), вам не нужно беспокоиться о том, что они вводят, пока вы не перейдете к его отображению. Когда вы на самом деле отобразите введенную ими информацию, вам захочется очистить ее, используя что-то вроде htmlentities()
.
Редактировать: Я понимаю, что, возможно, неправильно понимаю ваш вопрос. Если это так, игнорируйте это! 🙂
Комментарии:
1. Я отредактировал свое исходное сообщение, добавив больше информации. Они будут обращаться к исходному коду, когда будут вносить изменения. Я могу просто создать инструмент администратора для ввода информации…
Ответ №5:
Вы можете использовать функцию addslashes ($str) для автоматического экранирования кавычек.
Вы также можете попробовать htmlentities, который будет кодировать кавычки и другие специальные значения в HTML-объекты: http://php.net/manual/en/function.htmlentities.php