Экранирующая кавычка или специальные символы в значении массива

#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