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 &amp;.


посмотрите на исходный код, он будет печатать правильный код.

Если вы хотите, чтобы он правильно распечатывался в HTML, запустите htmlentities или сделайте & &amp;


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


вы, вероятно, отправляете свой вывод в веб-браузер.

правильный способ сделать это

в 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&lt;yz+3 </p>

теперь, как вы можете видеть, сам амперсанд имеет особое значение и, следовательно, должен быть спасен как &. функции htmlspecialchars() сделает это за вас.