funkcja zamienia "\" na "\\"

0

Witam, mama taki oto kod, który służy do nadawania stylów tekstu:

function parsebb($body) {
    $find = array(
        "@\n@",
        "@[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]@is", 
        "/\[url\=(.+?)\](.+?)\[\/url\]/is",
        "/\[b\](.+?)\[\/b\]/is", 
        "/\[i\](.+?)\[\/i\]/is", 
        "/\[u\](.+?)\[\/u\]/is", 
        "/\[color\=(.+?)\](.+?)\[\/color\]/is",
        "/\[size\=(.+?)\](.+?)\[\/size\]/is", 
        "/\[font\=(.+?)\](.+?)\[\/font\]/is",
        "/\[center\](.+?)\[\/center\]/is",
        "/\[right\](.+?)\[\/right\]/is",
        "/\[left\](.+?)\[\/left\]/is",
        "/\[img\](.+?)\[\/img\]/is",
        "/\[email\](.+?)\[\/email\]/is",
		"/\[code\](.+?)\[\/code\]/is",
		"/\[code\](.+?)\[\/code\]/is"

    );
    $replace = array(
        "<br />",
        "<a href=\"\0\">\\0</a>",
        "<a href=\"$1\" target=\"_blank\">$2</a>",
        "<strong>$1</strong>",
        "<em>$1</em>",
        "<span style=\"text-decoration:underline;\">$1</span>",
        "<font color=\"$1\">$2</font>",
        "<font size=\"$1\">$2</font>",
        "<span style=\"font-family: $1\">$2</span>",
        "<div style=\"text-align:center;\">$1</div>",
        "<div style=\"text-align:right;\">$1</div>",
        "<div style=\"text-align:left;\">$1</div>",
        "<img src=\"$1\" alt=\"Image\" />",
        "<a href=\"mailto:$1\" target=\"_blank\">$1</a>",
		"<pre style=\"kod\";>$1</pre>"
    ); 

Wszystko niby łądnie pięknie działa, ale kiedy wpisze: \ to do bazy ten znak zapisuje sie podwójnie, w takiej formie \. Kiedy zapisze 2 takie znaki, to do bazy zapisują się cztery. Nie mogę dość gdzie leży przyczyna. Proszę o pomoc

0

\ to escape character dzięki któremu np. taki " jest traktowany jako ", a nie jak koniec stringa.

var url = "http://jakis_tam_adres.com",
  withEscaping = "<a href=\"jakis_tam_adres\"> ... </a>",
  woEscaping = "<a href=' " + url + " '> ... </a>"; // albo woEscaping = "<a href='http://... '> ... </a>"; konieczność zastosowania dwóch ciapków

Jeżeli chcesz wyprintować pojedyńczy \ to musisz pokazać, że chcesz potraktować ten znak jako czysty znak, bez żadnego tam znaczenia ( nie wiem jak to napisać językiem technicznym.. :D). Tak się składa, że akurat escape character to \ więc robisz \\ i dostajesz \. Jak chcesz wyświetlić dwa to musisz wpisać 4 x \ jak 3 to 6 itd.

0

Pozostawiłem taki oto kod:

<?php
function parsebb($body) {
    $find = array(
        '@\n@',

    );
    $replace = array(
       '<br />',

    );
	

    $body = htmlspecialchars($body);
    $body = preg_replace($find, $replace, $body);
    return $body;
}

?>

Niestety nadal dzieje sie to samo, nawet jezeli usune z funkcji wszystko to \ sie mnożą nie mam pojecia czemu...

0

Nie znam się dobrze na PHP. Napisałem tylko kilka prostych skryptów dla siebie, Ale poczytaj sobie dokumentacje funkcji preg_replace. I zobacz jak należy jej używać. Na pewno nie robi się tego tak jak Ty to zrobiłeś tutaj :/

1 użytkowników online, w tym zalogowanych: 0, gości: 1