Teraz bez konieczności czytania nudnego kodu pozwól mi podsumować, co się dzieje. Wniosek XHR wychodzi za pomocą funkcji JQuery Post, gdy obciążenia dokumentu. Post wysyła nagłówek Post do pliku PHP, który wywołuje inny plik PHP, aby przetwarzać niektóre struny i zwrócić go. Wreszcie echo Funkcja JSON_ENCODODE zwraca ciąg do funkcji JQuery Post, który jQuery manipuluje do domu.

Rezultat zwracany przez funkcję postu JavaScript jest to:

<option value="\&quot;auto2\&quot;">auto2&lt;\/option&gt;</option>

Zobacz wszystkie te znaki ucieczki? Cóż, próbowałem po prostu odbijać wynik na stronie pHP zamiast echo ing z funkcją json_encode i powraca:

<option value="auto">auto</option>

Bez żadnych innych znaków specjalnych. To jest pożądane. Moje pytanie brzmi: czy to dobrze używać? I dlaczego json_encode Dodaj znaki specjalne? Czy istnieje sposób na użycie json_encode bez powróconych innych znaków?

EDYTUJ

JS

    $(document).ready(function() {
    var PROCESSOR_FILE = "http://address/include/processor.php";

    $.post(PROCESSOR_FILE, {"task": "verticalSelect"}, function(data) {
        $("#verticalSelect").html(data);
    });
});

PHP

$IMEXporterpath = dirname(__FILE__);
$IMEXporterFile = $IMEXporterpath . "/IMEXporter.class.php";

if (isset($_REQUEST["task"]))
    $task   = $_REQUEST["task"];
else
    $task   = "";


    require_once $IMEXporterFile;
    $IMEXp = new IMEXp();

    $result = $IMEXp->returnHtml($task);
    echo json_encode($result);

więcej php

public function returnHtml($element) {
        return $this->returnHtml_HTML($element);
    }


    private function returnHtml_HTML($element) {
        if($element == "verticalSelect") {

            $dbTables   = $this->get_Tables();
            $nbTable    = count($dbTables);

            for ($a = 0; $a < $nbTable; $a++) {
                    $ZHTML  .=  '<option value="'.$dbTables[$a].'">'.$dbTables[$a].'</option>';
            }
        }
        return $ZHTML;
    }
1
user1464296 31 sierpień 2012, 03:30

2 odpowiedzi

Najlepsza odpowiedź

W przypadku PHP 5.3.13:

header("Content-Type: text/plain"); // to make sure browser displays raw html
$str = '<option value="auto">auto</option>';

echo json_encode($str);
echo "\n";
echo $str;

Wyjścia

"<option value=\"auto\">auto<\/option>"
<option value="auto">auto</option>

Nie przekonwertowane znaki specjalne tutaj.

$.post('test.php').done(function(text){
  return console.log(text);
});

Wydrukuje takie same do konsoli.

Bez Ajax wykonuje JSON_ENCODE ($ STR) wyświetlacz &quot; itd?

0
Jan Święcki 30 sierpień 2012, 23:53

Nie widząc jakiegoś kodu, trudno wiedzieć, co się dzieje, a może nie rozumiałem twojego pytania. W moim doświadczeniu najlepiej umieścić wszystko w UTF-8. Nie pamiętam dokładnie, ale UTF-8 jest domyślnie dla AJAX w niektórych sytuacjach. Przepraszam za moją niejasność, ale nie wydaje się być dobrym obejściem, jeśli nie używasz UTF-8.

Oznacza to, że należy zmienić wszystkie tabele w bazie danych do UTF-8, zapisz wszystkie pliki w formacie UTF-8 (używam Textpad, aby zmienić format) i określić wszystkie strony HTML do UTF-8.

Musiałem przejść przez to nieprzyjemne doświadczenie, ponieważ opracowuję miejsca w języku portugalskim z dużą ilością akcentowanych postaci. Próbowałem użyć ISO-8859-1, ale po tym, jak działa więcej z AJAX, odkryłem, że UTF-8 jest naprawdę jedyną realną opcją.

0
Expedito 30 sierpień 2012, 23:50