2012-06-09 1 views
0

Я принимаю предустановленный вход из другого файла .phpБелая проблема пространства с PHP

$Instructor=$_POST["Instructor"]; 

echo $Instructor, когда я, выход Dr. Doom (что правильно)

Когда я передать его через FIELDSET Я получаю только (д-р), а не (Doom). Мне нужно, чтобы все имя прошло. Может ли кто-нибудь помочь. Я НОВЫЙ ДЛЯ PHP, поэтому, пожалуйста, попробуйте объяснить в простой форме. Спасибо вам большое загодя. вот код, который я использую.

echo "<fieldset> 
<Legend> Contact Information </Legend> 
PROFESSOR: <inputname='Professor' type= 'text' value=$Instructor maxlength='35' 
      disabled='disabled'> </fieldset>" 
+0

Вы можете вставить тег, просто используйте кнопку коды для форматирования коды, и они будут не исчезают – nico

+0

@Mike B: он помещает запятые там, потому что SO не будет показывать теги в обычном тексте (вы должны указать их как код). Он явно написал: «<,> не может быть вставлен, поэтому, пожалуйста, предположите, что синтаксис правильный». Ошибка - это отсутствие экранирования, как вы можете видеть из ответов. – nico

+0

@nico. Тогда это НЕ тот код, который он использует (см. Мой комментарий в ответе Майкла), потому что абсолютно ничего об этом не имеет смысла и будет производить любую функциональность. Голосовать, чтобы закрыть как слишком локализованный. –

ответ

3

Sincce вы опущенные цитаты на атрибут HTML, только символы до первого пробела будет интерпретироваться в вашем HTML. Quote атрибут, и избежать ее должным образом с htmlentities() с помощью опции ENT_QUOTES:

echo "<fieldset ... ... value='" . htmlentities($Instructor, ENT_QUOTES) . "' ... </fieldset>"; 

Обратите внимание, что без экранирования, она уязвима для межсайтового скриптинга, в дополнение к потенциально нарушая выходной разметки.

+1

@MikeB Huh? Конечно, пробелы важны. Пространство в «Доктор Дум» - вот то, что вызывает всю проблему! И у вопроса был '$ Instructor' тоже, поэтому я не знаю, почему вы жалуетесь на этот ответ с' $ Instructor'. –

+0

@MrLister Я неправильно понял вопрос до того, как беспорядок был очищен в редактировании. OP попросил удалить пустое пространство (посмотрите на тег на вопросе), и у меня просто были проблемы с созданием головок или хвостов (зачем было удалять пустое пространство, чтобы превратить 'Dr' в' Dr Doom'). Я получаю весь атрибут цитирования, но, как его код начал (см. Ревизию 1), мне было трудно понять, как он когда-либо приближался к работе. –

+0

Ох ... «Я только получаю (доктор), а не (Doom).«бит был в неотредактированном вопросе все время, что было основным вопросом, поэтому я вроде упустил тег [remove-whitespace]. –

1

Вам нужно поместить кавычки вокруг значений атрибутов, содержащих пробелы. В вашем случае они должны быть экранированы, потому что PHP строковый литерал также использует их:

echo "... value=\"$Instructor\" ..."; 
1

Variable санитарную в сторону, ты забыл процитировать это:

value=$Instructor 

И возражаете пространство здесь:

type= 'text' 

Кстати, в PHP есть хороший синтаксис под названием «heredoc», если вы хотите использовать блоки HTML-текста.

$str = <<<EOF 
<fieldset> 
<Legend> Contact Information </Legend> 
PROFESSOR: <inputname='Professor' type='text' value='$Instructor' maxlength='35' disabled='disabled'> 
</fieldset> 
EOF; 

Что приятно текст может оставаться читаемым человеком и по-прежнему поддерживает встроенную переменную интерполяции (положить «$ что-то вроде этого»)

+1

Обратите внимание, что пространство в' type = 'text'' является допустимым HTML. ставить кавычки вокруг '$ Inspector' будет делать допустимый HTML, только если в значении' $ Inspector' нет кавычек. –

+0

Отличные точки, спасибо – buley