У меня есть определенная проблема. Я пытаюсь создать бота IRC, который имеет амперсанд в его пароле. Однако я испытываю затруднения при помещении амперсанда в строку. Например...
<?php
$var = "g&abc123";
echo $var;
?>
Я полагаю, что это должно распечатать g&abc123
. Однако это печатает g
.
Я попробовал это также:
<?php
$arr = array("key" => "g&abc123");
print_r($arr);
?>
Это печатает его правильно с g&abc123
, однако, когда я говорю echo $arr['key'];
это печатает g
снова. Любая справка ценилась бы. Я выполняю PHP5.3.1.
Править: Кроме того, я просто заметил это, если я использую g&abc123&abc123
это печатает g&abc123
. Какие-либо предложения?
У меня нет этой проблемы в консоли :
php > $d="g&abc123";
php > echo $d;
g&abc123
В какой среде вы печатаете вывод? Похоже, вы просматриваете его в веб-браузере, а символ & интерпретируется как искаженный HTML-объект. Попробуйте заменить символ & версией закодированной сущности &
.
Посмотрите исходный код, он будет печатать правильный код.
Если вы хотите, чтобы он правильно распечатывался в HTML, запустите на нем htmlentities или сделайте & &
Вы, вероятно, отправляете вывод в веб-браузер.
Правильный способ сделать это
В HTML, XHTML и XML амперсанд имеет особое значение. Он используется для символьных сущностей. Вы можете рассматривать это как своего рода escape-последовательность.
Например, в PHP это было бы незаконно:
$variable = 'It's Friday';
Это потому, что апостроф интерпретируется PHP как конец вашей строки, а остальная часть вашего содержимого выглядит как мусор.
Вместо этого вы должны сказать:
$variable = 'It\'s Friday';
Точно так же в HTML и XHTML вы не можете сказать
<h1>Inequalities</h1>
<p> x<yz+3 </p>
Это потому, что это будет интерпретироваться как элемент.
Вместо этого вы должны сказать:
<h1>Inequalities</h1>
<p> x<yz+3 </p>
Теперь, как вы можете видеть, сам амперсанд имеет особое значение и, следовательно, должен быть экранирован как &. htmlspecialchars () сделает это за вас.
Просмотрите исходный код веб-страницы, чтобы убедиться, что ваша переменная содержит правильное значение.