2012-01-24 1 views
1

У меня есть система управления клиентом, которую я запрограммировал в php и mysql. Компания использует его для регистрации своих данных о клиентах для маркетинга и заказов. В моей форме есть разные поля, одним из которых является «Бизнес-имя».Амперсанды в текстовых полях прикручиваются с отображением данных поля

Поля импортируются в почтовый отправитель, чтобы отправить клиентам котировки и т. Д. Содержимое поля извлекается из базы данных и сохраняется в разных строках. Например, имя предприятия хранится в $name.

Проблема, которую я обнаружил, заключается в том, что бизнес вводит такое название предприятия, как Joe Blogs & Sons, что заканчивается тем, что ввезено в систему электронной почты, - Joe Blogs, и все, что угодно после того, как амперсанд отключен, включая амперсанд. Если они используют Joe Blogs and Sons, это прекрасно работает, и когда он выходит по электронной почте, он говорит Dear, Joe Blogs and Sons, но если кто-то входит &, он просто заканчивается как Dear, Joe Blogs.

Могу ли я сказать что-то вроде s tr_replace или preg_replace - это способ пойти или нет, чтобы избежать &? ,

+0

Вы проверили, если имена правильно хранятся в базе данных? Если они есть, возможно, вам следует просто применить функцию 'htmlentities()' к переменным перед печатью/эхом в электронном письме. – entropid

+0

Слишком мало информации. Есть много шагов на пути, где именно текст отсутствует? – deceze

+0

Он пропадает всякий раз, когда он вытаскивается из базы данных и добавляется в строку, тогда echo'd, поэтому, если я выберу из db и поместил результаты в строку, то эхо-строку, & и все после ее исчезновения. Имя хранится в базе данных отлично, поскольку они вытаскивают их обратно в поля при редактировании. –

ответ

2

Используйте либо htmlentities(), либо htmlspecialchars(), чтобы кодировать специальные объекты HTML для инъекций в контекст HTML. Обратите внимание, что этих функций не достаточно для любого другого контекста. Пример:

Хорошо:

<p><?php echo htmlspecialchars($foo); ?></p> 

Bad:

<a href="<?php echo htmlspecialchars($bar); ?>">Click me!</a> 
+0

Привет, я знаю, что это нормально для html-писем, но будет ли это работать для простого текстового письма, хотя, я имею в виду, он отправит Dear Smith & Сыну, или мне нужно разбить его еще до того, как я его отправлю? –

+0

@IainSimpson: Обычный текст - это простой текст.Вам не нужно кодировать что-либо для этого контекста. Просто 'echo $ foo;' или что-то еще. – FtDRbwLXw6

+0

'Click me!' хорошо! –

0

попытаться преобразовать & в &amp;. Существуют различные функции php для этого. Выберите тот, который подходит вам

+0

Будет ли это конвертировать при отправке электронной почты, а не в сохранении данных в db?, Как если бы я заменил & с &, он был бы втянут в имя поля, если запись была отредактирована, мне просто интересно, было возможно str_replace & with и POST. –

0

Это зависит от того, что вы подразумеваете под «импортированным в почтовый клиент».

Я предположил бы, что вам просто нужно преобразовать & 'S в &amp;-х - вероятно, лучше всего использовать htmlentities вокруг каждой переменной (при условии, что они не держат HTML, который нуждается в разобранное) как часть вашего «очистки строки " обработать.