2010-06-17 17 views
5

Ich habe ein kleines Problem. Ich versuche einen IRC-Bot zu erstellen, der ein Und-Zeichen in seinem Passwort hat. Ich habe jedoch Probleme, das Ampersand in eine Zeichenfolge zu setzen. Zum Beispiel ...PHP Ampersand in String

<?php 

$var = "g&abc123"; 

echo $var; 

?> 

Ich glaube, das g&abc123 gedruckt werden soll. Aber es druckt g.

habe ich versucht, dies auch:

<?php 
$arr = array("key" => "g&abc123"); 
print_r($arr); 
?> 

Dies druckt es richtig mit dem g&abc123, aber wenn ich echo $arr['key']; sagen, es druckt g wieder. Jede Hilfe wäre willkommen. Ich betreibe PHP5.3.1.

EDIT: Auch habe ich gerade festgestellt, dass, wenn ich g&abc123&abc123g&abc123 drucken. Irgendwelche Vorschläge?

+0

Wo wird das ausgegeben? –

+0

Ich habe PHP 5.2.9 getestet und es funktioniert gut .... jetzt ist das ein merkwürdiger. – websch01ar

Antwort

5

mache ich nicht über diese Frage in einer Konsole:

php > $d="g&abc123"; 
php > echo $d; 
g&abc123 

Welche Umwelt druckst du die Ausgabe an? Es klingt wie Sie es in einem Webbrowser anzeigen, und die & wird als fehlerhafte HTML-Entität interpretiert. Ersetzen Sie das Symbol & durch die codierte Version &amp;.

+0

Sie sind richtig, ich drucke in den Browser. Es ist jedoch nicht Teil eines HTML-Tags, Link, etc. Es ist nur der einzige Text auf der Seite. Auch habe ich versucht mit & und es korrekt angezeigt. Leider ist das ein Problem, weil ich die Daten an einen Server senden muss, und ich bin mir nicht sicher, ob es als g & abc123 gesendet wird oder wenn es als g gesendet wird, und ich g & abc123 nicht senden kann. –

+1

Sie können Text mit der Funktion PHP htmlentities automatisch in diese Form transformieren und mit html_entity_deocode dekodieren - siehe http://php.net/manual/en/function.html-entity-decode.php Wenn Sie es irgendwo senden, usw. Sie können sicher sein, dass der gesendete Wert der Wert ist, der von print_r angezeigt wird. – JAL

+1

Sie haben Recht. Ich habe das in Firefox versucht und es passiert nicht. Es scheint ein Chrome-Problem zu sein. Vielen Dank! –

5

Schauen Sie sich den Quellcode an, es wird der richtige Code gedruckt.

Wenn Sie es wollen, in HTML korrekt auszudrucken, dann htmlentities darauf laufen oder die & &amp;

+0

Ich überprüfte den Quellcode, es sagt nur "g". –

+1

Dann stimmt etwas mit Ihrem Server nicht - ich habe es gerade getestet (kopiert und eingefügt Ihren Code): http://www.phoenixdev.net/test-2.php –

+0

Nein Kerry, in Chrome bekomme ich die gleichen Ergebnisse. ;) Kommt aber nicht in Firefox vor. –

1

Zeigen Sie die Webseitenquelle an, um sicherzustellen, dass Ihre Variable den korrekten Wert enthält.

+0

Ich habe das vor 18 Minuten ... –

1

Sie senden Ihre Ausgabe wahrscheinlich an einen Webbrowser.

Der richtige Weg, es zu tun

In HTML, XHTML und XML ist, hat die Et-Zeichen eine besondere Bedeutung. Es wird für Zeichenentitäten verwendet. Sie können es sich als eine Art Escape-Sequenz vorstellen.

Zum Beispiel in PHP, das wäre illegal:

$variable = 'It's Friday'; 

Dies liegt daran, das Apostroph durch PHP als das Ende der Zeichenfolge interpretiert wird, und der Rest Ihrer Inhalte sieht aus wie Müll.

Stattdessen muss man sagen:

$variable = 'It\'s Friday'; 

Auch in HTML und XHTML, Sie nicht

<h1>Inequalities</h1> 
<p> x<yz+3 </p> 

sagen Dies ist, weil es als ein Element interpretiert werden würde.

Stattdessen würde man sagen:

<h1>Inequalities</h1> 
<p> x&lt;yz+3 </p> 

Nun, wie Sie sehen können, das Und-Zeichen selbst hat eine besondere Bedeutung und muss deshalb als & entkommen sein. htmlspecialchars() wird es für Sie tun.

+0

Nun ... Ich kenne die PHP-Beispiele ... Ich weiß das auch und hat kein Problem in Firefox. Ich verstehe, dass in XHTML (und wahrscheinlich auch HTML) & der richtige Weg ist, es zu tun. Aber ich habe noch nie einen Browser wütend gemacht, weil es nicht so gemacht wurde. Vertrauen Sie mir, wenn ich versuchen würde, dieses gültige XHTML zu erstellen, wäre es ein &, aber ich benutzte es nur für Debug-Zwecke. –

+0

Leider wurden Browser so konzipiert, dass sie praktisch alles akzeptieren, was man ihnen zuwirft, aber wie es gehandhabt wird, hängt von der Interpretation ab. Das HTML5-Team versucht, einen Standard für den Umgang mit "Tag-Suppe" zu schaffen ... Ich bin persönlich nicht allzu glücklich darüber, aber was kann ich tun? Ich empfehle, dass Sie einen Alias ​​für echo htmlspecialchars ($ text) erstellen; Beispiel: function h ($ text) {echo htmlspecialchars ($ text); } – MapDot