PHP амперсанд в строке
у меня небольшая проблема. Я пытаюсь создать 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
. Есть предложения?
4 ответов
у меня нет этой проблемы в консоли:
php > $d="g&abc123";
php > echo $d;
g&abc123
в какую среду вы печатаете вывод? Похоже, вы просматриваете его в веб-браузере, и & интерпретируется как искаженный HTML-объект. Попробуйте заменить & символ на entity encoded version &
.
посмотрите на исходный код, он будет печатать правильный код.
Если вы хотите, чтобы он правильно распечатывался в HTML, запустите htmlentities или сделайте & &
вы, вероятно, отправляете свой вывод в веб-браузер.
правильный способ сделать это
в HTML, XHTML и XML амперсанд имеет особое значение. Он используется для сущностей символов. Вы можете думать об этом как о своего рода побеге.
например, в 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() сделает это за вас.