webForumDet fria alternativet

' och " i formulärsfält

PHP

13 svar · 744 visningar · startad av MickeA.com

Medlem sedan feb. 20034 441 inlägg
Frågan#1

Hej,

Jobbar på ett översättningssystem där man ska översätta massa strängar.
Jag har gjort så att x antal <input type="text"> skrivs ut, där man sedan kan översätta resp. sträng till olika språk.

Nu har jag dykt på lite problem...
Såhär ser min kod ut

echo "<input type=\"text\" name=\"string_" . $res['item_id'] . "\" value=\"" . $value_text . "\" /></p>\n";

$value_text kan t.ex. innehålla:

Couldn't find any user with the specified nickname
Language <span style="color: #ff0000;">*</span>

I nuläget funkar den första strängen ovan. När den sistnämnde skrivs ut, blir resultatet såklart:

Language <span style=

Finns det någon bra lösning för att kunna visa både ' och "?
Har testat med bl.a. htmlentities() men det konverterar övrig htmlkod.

Medlem sedan mars 20041 505 inlägg
#2

Använd htmlspecialchars med ENT_QUOTES.

Medlem sedan feb. 20034 441 inlägg
#3

Troxy skrev:

Använd htmlspecialchars med ENT_QUOTES.

Jag var inne på det från början, problemet är att < och > blir < resp. > Tanken med det här systemet är att det ska vara lättarbetat och våra översättare har inte någon vana av HTML, därför vore det bra om det på något sätt gick att lösa utan att konvertera om tecken.

Möjligen om det går att konvertera dom i källkoden, men visa dom "normalt".

Jag har testat att köra med <textarea> och det funkar ju, problemet är att man kan skriva på flera rader då och det är inte heller bra.

Fler förslag?

Medlem sedan mars 20041 505 inlägg
#4

Jag förstår inte. Vill du inte omvandla HTML-koden för att visa den i ett input-fält? :q
Du kan ju inte ha taggar inuti ett value-attribut, så alla specialtecken måste omvandlas till entities.
Det är precis det som htmlspecialchars() gör.

Medlem sedan feb. 20034 441 inlägg
#5

Det jag var ute efter var att kunna visa ' och " och samtidigt slippa konvertera <, > osv. i ett input fält, men det verkar ju inte som om det går.

Medlem sedan juni 20031 837 inlägg
Medlem sedan feb. 20034 441 inlägg
#7

Om jag använder dom där, blir det inte så att "\" skrivs ut framför " och ' i textfälten?

Medlem sedan mars 20041 505 inlägg
#8

Slashes har inget med detta att göra...
Du måste nog ersätta < och > (plus några andra specialtecken) med sina respektive entities, annars blir det knasig markup.

<input type="text" name="string_1" value="Language &lt;span style=&quot;color: #ff0000;&quot;&gt;*&lt;/span&gt;" />
Medlem sedan feb. 20034 441 inlägg
#9

Jo, har sett att det blir lite knasigt.
Bl.a. skrivs   ut som &nbsp;.

Ska kolla mer på det där imorrn, återkommer.

Medlem sedan feb. 20034 441 inlägg
#10

Nu måste jag reda ut ett par saker...
När alla strängar skrivs ut i inputfälten har jag hittills kört htmlspecialchars().

Det har funkat jättebra.
Då skrivs stängarna ut ungefär såhär:

&lt;strong&gt;Open an account&lt;/strong&gt;&lt;br /&gt;Easy registration!

Så långt är det rätt.
Nu är problemet att om jag matar in en ny sträng, som t.ex. innehåller

<br />

...då blir problemet att det tidigare < konverteras om till &lt;

Så, hur ska datan sparas i databasen? Som "ren" kod eller som dess entity?

Tack,

Medlem sedan mars 20041 505 inlägg
#11

MickeA.com skrev:

Så, hur ska datan sparas i databasen? Som "ren" kod eller som dess entity?

Ren kod! :)
Omvandla till entities vid behov, t.ex. utskrift i value-attribut.
När webbläsaren postar formuläret så omvandlas entities tillbaka till sina respektive tecken.

Medlem sedan feb. 20034 441 inlägg
#12

Okej, då är det bara att göra om lite då...
En sak till, om jag nu sparar ren kod i databasen och sen skriver jag ut det här i ett formulärsfält:

&lt;strong&gt;Open an account&lt;/strong&gt;&lt;br /&gt;Easy registration!

När jag sedan postar formuläret, ska jag köra html_entites_decode eller något sånt för att göra om < till <, eller sker det av sig själv?

Medlem sedan mars 20041 505 inlägg
#13

MickeA.com skrev:

När jag sedan postar formuläret, ska jag köra html_entites_decode eller något sånt för att göra om < till <, eller sker det av sig själv?

Webbläsaren fixar detta, du behöver inte göra något.

Troxy skrev:

När webbläsaren postar formuläret så omvandlas entities tillbaka till sina respektive tecken.

<form method="post" action="post.php">
<input type="text" value="&lt;br&gt;" name="test">
<button type="submit">Post</button>
</form>

$test = $_POST['test']; //värdet på mottagarsidan blir: <br>
Medlem sedan feb. 20034 441 inlägg
#14

Det blev jättebra det här, tack!

268 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
132 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)