PHP zamiana znaków


(Devicet) #1
Witam.

Mam tutaj taki kod. Póki co wyświetla w polu tekstowym 1 to co było wpisane w polu tekstowym 0.

Chciałbym, żeby skrypt PHP zamieniał dowolny znak np. ; na dowolny znak np. }
Najlepiej żeby dowolny znak to była zmienna definiowana przez użytkownika w jakiś input.
Próbowałem str_replace()
lecz coś robię źle.

<!DOCTYPE HTML>
    <html>
    <head>
    <title>zamiana</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <link href="main.css" type="text/css" rel="stylesheet" />
    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1" />
    </head>

    <body>

    <div id="formularz">

    <form method="post">

        <textarea name="tekst" placeholder="Napisz tu wiadomość"></textarea>
        <input id="submit" name="submit" type="submit" value="Wyślij">
            
    </form>
    </div>

    <div id="formularz1">
    <form method="post">
    <textarea>
    <?php

    echo htmlspecialchars ($_POST['tekst']);

    ?>

    </textarea>
    </form>
    </div>

    </body>

    </html>

(Pablo_Wawa) #2

I to jest całość Twojego kodu? Brakuje części od zamiany znaków - na początek zapoznaj się z funkcją str_replace i zastosuj ją w swoim kodzie.


(Devicet) #3
<div id="form">
<input name="znak1" placeholder="wprowadz znak, ktory chcez zmienic">
<input name="znak2" placeholder="wprowadz znak na ktory zamieniasz">
</div>

<div id="formularz1">
    <form method="post">
    <textarea>
    <?php

htmlspecialchars ($_POST['znak1']); 
htmlspecialchars ($_POST['znak2']); 
$output  = str_replace($znak1, $znak2, $tekst);

echo $output;
?>

</textarea>
    </form>
    </div>

(Pablo_Wawa) #4

Ale programowanie to nie czarowanie, tu trzeba komputerowi wyraźnie napisać co, z czym i jak, bo on się nie domyśli, co Ty chcesz, by zrobił.

$tekst = $_POST['tekst'];

$znak1 = htmlspecialchars ($_POST['znak1']); 
$znak2 = htmlspecialchars ($_POST['znak2']); 
$output = str_replace($znak1, $znak2, $tekst);

echo htmlspecialchars ($output);

(Devicet) #5

Dziękuję za odpowiedź. Zaimplementowałem podany kod.

<!DOCTYPE HTML>
<html>
<head>
<title>zamiana</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="main.css" type="text/css" rel="stylesheet" />
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1" />
</head>
<body>
<div id="formularz">
<form method="post">
    <textarea name="tekst" placeholder="Napisz tu wiadomość"></textarea>
    <input id="submit" name="submit" type="submit" value="Wyślij">
        
</form>
</div>
<div id="form">
<input name="znak1" placeholder="wprowadz znak, ktory chcesz zmienic">
<input name="znak2" placeholder="wprowadz znak na ktory zamieniasz">
</div>
<div id="formularz1">
    <form method="post">
    <textarea>
    <?php
$tekst = $_POST['tekst'];
$znak1 = htmlspecialchars ($_POST['znak1']); 
$znak2 = htmlspecialchars ($_POST['znak2']); 
$output = str_replace($znak1, $znak2, $tekst);
echo htmlspecialchars ($output);
?>
</textarea>
</form>
</div>
</body>
</html>

Otrzymuje błąd w liniach ze zmiennymi

$znak1 = htmlspecialchars ($_POST[‘znak1’]);
$znak2 = htmlspecialchars ($_POST[‘znak2’]);

Mimo określenia w formularzu zmiennych i wysłania go, nie zamienia on podanych znaków.


(Pablo_Wawa) #6

Może w kodzie HTML w polach input
<input name="znak1" ...
potrzeba dodać jeszcze, że to jest pole tekstowe, czyli
<input type="text" name="znak1" ...

EDIT: te wspomniane przeze mnie wiersze znajdują się poza formularzem
<form> ... </form>
to musisz poprawić, bo po prostu pola ‘znak1’ i ‘znak2’ nie są przez to przesyłane w tym formularzu.


(Devicet) #7

Dziękuję za odpowiedzi. Wyrzuciłem te wiersze do sekcji body. Wtedy dalej informuje o błędach.
U mnie pole niebieskie to formularz dla tekstu <div id="formularz">
<div id="form"> to są wejścia dla znaków
<div id="formularz1"> to czerwone pole i tu chciałem, żeby wyświetlał się ten zmieniony tekst.

Dlatego opakowałem na początku funkcję htmlspecialchars, która jedynie “cytowała” mój tekst do czerwonego formularza.
Oczywiście nie musi być to formularz jeśli on powoduje problem.

Jutro zajmę się tematem do końca. Dziękuję bardzo


(Pablo_Wawa) #8

Aż sam postanowiłem to w praktyce sprawdzić. I wiesz co - u mnie działa! :stuck_out_tongue:
Być może coś źle poprawiasz/przenosisz - sekcję z 4 wierszami począwszy od
<div id="form">
musisz przenieść kilka wierszy wyżej, np. tuż przed znacznik końca (pierwszego) formularza
</form>
I to już powinno dać oczekiwany efekt (po Wyśij), trzeba się jeszcze pozbyć błędu pobierania wartości nie ustawionych zmiennych (nie wysłanych w formularzu) - za pierwszym wyświetleniem strony pola ‘tekst’, ‘znak1’ i ‘znak2’ nie są zainicjowane (nie są przesłane w formularzu):

$tekst = isset($_POST['tekst']) ? $_POST['tekst'] : '';
$znak1 = isset($_POST['znak1']) ? $_POST['znak1'] : '';
$znak2 = isset($_POST['znak2']) ? $_POST['znak2'] : '';

Ta konstrukcja
warunek ? w1 : w2
to taki
if (warunek) w1 else w2
dla wyrażeń.

A funkcję htmlspecialchars() należy używać tylko dla zmiennych/danych wypisywanych/wyświetlanych na stronie (i ew. zapisywanych do bazy), więc usunąłem je tam, gdzie była zbędna.

Wybacz, że nie podaję całego (działającego) kodu, ale to chyba nie o to chodzi - Ty sam masz (poprzez naukę, również na własnych błędach) dojść do właściwego rozwiązania. :slight_smile:


(Devicet) #9

Dziękuję bardzo za pomoc :blush: Działa; jak przeniosłem sekcję z wejściami dla zmiennych do 1 formularza.
Niby błahy błąd, a jednak robi problem :slight_smile:
Poprawiłem też kod biorący zmienne.
Jeszcze raz dziękuję za pomoc w nauce.


(Pablo_Wawa) #10

Super, cieszę się, że sobie poradziłeś.