Escape-кавычки или специальные символы в значении массива - PullRequest
3 голосов
/ 05 мая 2011

В моем 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, и я боюсь, что они могут поместить одинарную или двойную кавычку в область «имя ссылки» и сломать систему.

Еще раз спасибо.

ВОЗМОЖНОЕ РЕШЕНИЕ:

Спасибо @Тим Купер.

Вот пример, который работал для меня ...

$link = "http://www.google.com";
$text = <<<TEXT
Don't you loving "googling" things
TEXT;
$linksArray[$text] = $link;

Ответы [ 5 ]

1 голос
/ 05 мая 2011

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 голос
/ 05 мая 2011

Использование heredoc может быть хорошим решением:

$myArray[]['Text'] = <<<TEXT

Place text here without escaping " or '

TEXT;
0 голосов
/ 05 мая 2011

Вы можете использовать функцию addlashes ($ str) для автоматического экранирования кавычек.

Вы также можете попробовать htmlentities, которые будут кодировать кавычки и другие специальные значения в сущности HTML: http://php.net/manual/en/function.htmlentities.php

0 голосов
/ 05 мая 2011

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

Редактировать: Я понимаю, что, возможно, я неправильно понимаю ваш вопрос. Если это так, игнорируйте это! :)

0 голосов
/ 05 мая 2011

Если вы действительно хотите упростить процесс, используйте отдельный файл конфигурации в стиле INI или XML.INI обычно проще всего редактировать вручную.XML хорош, если у вас действительно вложенная структура.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...