проблема с апострофом php

Я делал школьное задание с помощью чата. Найден отличный учебник, в котором используются jquery, ajax, mysql и php. Теперь я столкнулся с небольшой проблемой со следующим предложением:

$result .= "<li><strong>".$row['user']."</strong><img src="\" alt="\"-\""    />".$row['message']." <span class="\"date\"">".$row['date']."</span></li>";}

Мне было интересно, может ли кто-нибудь узнать, почему он дает ошибки. До сих пор я пришел к такому выводу $row['message'], а затем он считает остальной код строкой. Так что это, вероятно, проблема с апострофом.


person Robin Hinderiks    schedule 15.05.2012    source источник
comment
Посмотрите, как редактор StackOverflow выделил ваш код. Посмотрите, где изменился цвет содержимого между ", который вы хотите показать как $result. Это должно помочь вам понять, почему ваш код выдает ошибки.   -  person PenguinCoder    schedule 16.05.2012


Ответы (4)


Просто чтобы облегчить себе жизнь: используйте ' для php и " для html следующим образом:

$result .= '<li><strong>'.$row['user'].'</strong><img src="" alt=""/>'.$row['message'].' <span class="date">'.$row['date'].'</span></li>';

Уверен, вы должны уловить идею.

person Andrius Naruševičius    schedule 15.05.2012
comment
Это ИМХО самое понятное решение. Если строка еще не отфильтрована (что я догадываюсь по названию), то вы, вероятно, захотите очистить свой вывод с помощью htmlspecialchars(), чтобы предотвратить атаки XSS. - person YMMD; 16.05.2012
comment
Да, абсолютно согласен, но я почти уверен, что контекст самого вопроса не был на уровне предотвращения атак и не спрашивал об этом. Впрочем, хороший совет на будущее для спрашивающего :) - person Andrius Naruševičius; 16.05.2012
comment
Я собираюсь изучить htmlspecialchars(). Спасибо за совет. Кажется, это решение, которое я приму примерно через 3 минуты :) - person Robin Hinderiks; 16.05.2012

$result .= "<li><strong>{$row['user']}</strong><img src='http://www.' alt='My Alt Tag' />{$row['message']}<span class='date'>{$row['date']}</span></li>";

Вы сбиваете себя с толку, входя и выходя из кавычек - вы можете обернуть переменные {}, чтобы принудительно интерполировать в таких случаях.

person Rawkode    schedule 15.05.2012
comment
Это, казалось, решило проблему. Их некоторые другие проблемы, но я попробую сам. Спасибо. - person Robin Hinderiks; 16.05.2012

$result .= "<li><strong>".$row['user']."</strong><img src='' alt='-'/>".$row['message']." <span class='date'>".$row['date']."</span></li>";}

Избегайте использования " внутри строки - легко забыть об экранировании специальных символов. Вместо " используйте '. Кроме того, вы используете " только тогда, когда в этой строке требуется какой-либо анализ PHP. Например.

$var1 = 1;
$test = "$var1"; //evaluates to '1'
$test = '$var1'; //evaluates to '$var1'
person mcmajkel    schedule 15.05.2012

Похоже, вы пытаетесь избежать кавычек и усложняете себе работу. Отличительной особенностью PHP для вывода HTML является использование строк в кавычках, поэтому вам не нужно беспокоиться об экранировании двойных кавычек. См. Руководство по PHP для строк.

Другими словами, ваша строка становится:

 $result .= '<li><strong>' . $row['user'] . '</strong><img src="" alt="-" />' . $row['message'] .
            '<span class="date">' . $row['date'] . '</span></li>' .
            '<li><strong>' . $row['user'] . '</strong><img src="" alt="-" />' . $row['message'] . 
            '<span class="date">' . $row['date'] . '</span></li>';
person matthewnreid    schedule 15.05.2012