PHP / MySQL / jQuery karakter kodlama sorunu

2 Cevap php


I made some CMS in PHP which manipulates with data from MySQL.
In my CMS, i have some input fields in which I would like to have jQuery's fancy autocomplete implemented. Basically, the idea is to create jQuery's arrays from MySQL tables...

PHP 5.3.0, MySQL 5.0.82 ve Eclipse 3.4.2 ile çalışıyorum. Eclipse benim PHP proje UTF-8 kodlanmış. Benim CMS sayfaları UTF-8 karakter kodlaması vardır (<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />). Web Sitesi kendisi UTF-8 kodlaması ile aynı zamanda. MySQL veritabanı ve tüm tabloları UTF-8 (utf8_general_ci) bulunmaktadır.

Bu noktada her şeyi (hatta uluslararası ve bazı garip semboller) sadece harf girme ediyorsam çalışıyor, ama ben " bu karakterlerden bazıları girerseniz, &, {[(2) ]} veya >, bazı ciddi sorunlarla ...

Böyle Metin girerken, her şey benim veritabanında iyi görünüyor, ama ben jQuery için bir dizi oluşturmak çalıştığınızda, çünkü tırnak (ben bile tek tırnak sorun burada olduğunu varsayalım) bir hata oluşturur ... Yani ben gerektiğini herhalde Doğru, bir şekilde onları kaçmak? Sonra PHP'nin htmlspecialchars kullanmak ve jQuery'nin dizi düzgün oluşturulur. Ben giriş alanının içini tıklatın ve metni yazmaya başlamak bile, otomatik tamamlama doğru tüm bu karakterleri gösterir. Ben aslında bu karakterlerle kayıtlardan birini seçerseniz html karakterlerini kaçtı (&quot;, &amp;, &lt;, {[(4) gibi ama, onlar aniden ortaya ]}). Yani aynı girişi alanına htmlspecialchars_decode uygulamaya çalıştı ama ... Ben jQuery'nin otomatik tamamlama bir kayıt seçtiğinizde benim giriş alanına doğru bu karakterleri görüntülemek için bir yolu var mı yardım etmedin?

I've tried to google the problem, but I couldn't find anything to solve my problem... Please help!
Thanks in advance!


EDIT: This is the way I am creating an array for jQuery ($tags is just a simple array):

<?php
$t = implode(", ", $tags);
?>
<script>
$(document).ready(function(){
    var data_tags = "<?php echo htmlspecialchars($t); ?>".split(" | ");
    $("#input_tags").autocomplete(data_tags, { multiple: true, multipleSeparator: ", " });
});
</script>

Ben belki en iyi yol değil biliyorum, ama genellikle işe yarıyor :)

Ben bir giriş alanını bu şekilde üreten ediyorum:

<?php

function inputField($label, $name, $type, $size, $default=NULL, $misc=NULL){

    $printInput = "<tr><td align=\"right\" valign=\"top\">\n";
    $printInput .= $label;
    $printInput .= "</td><td>\n";
    $printInput .= "<input type=\"".$type."\" size=\"".$size."\" name=\"".$name."\" id=\"".$name."\" value=\"".$default."\"> ".$misc."\n";
    $printInput .= "</td></tr>\n";

    return $printInput;

}

echo inputField("TAGS", "input_tags", "text", 70, $db_tags);
?>

2 Cevap

PHP 5.2.0 veya üstü gerektirir ki, json_encode() sahipsiniz.

EDIT Sen json_encoded değer etrafında tırnak gerekmez:

var data_tags = <?php echo json_encode($t); ?>;

Bunun yerine, htmlentities(); kullanmayı deneyin.