2017-05-15 24 views
0

每當用戶使用php將他們的用戶配置文件輸入到數據庫中時,我使用字符串過濾器將其轉換爲html實體。

當用戶正在編輯他們的個人資料遲..不知道如果我這樣做是正確的。但我使用php循環遍歷所有字段,並設置它們隨後的「鍵」,它是輸入名稱與數據庫中的值。

<?php php foreach ($usermeta as $key=>$value){ ?> 
<script> $("<? echo $key; ?>").val("<? echo $val ;?>"); </script> 
<?php } ?> 

這工作很棒。但是html實體不會被轉換回來?我該怎麼做呢?有沒有辦法做到這一點,而不是打破了jQuery的時候你把html實體撇成撇號或逗號?

我不能只是將每個值回顯到輸入val,因爲我在某些情況下有下拉列表,據我所知...通過php循環訪問您的值並通過jquery設置值是設置唯一方法下拉菜單。

+0

不要在將數據存儲到數據庫時執行此操作。原樣存儲原始數據。當你輸出它時,通過必要的處理函數發送它(而不是'htmlentities'),而不是'htmlspechialchars'。 – CBroe

+0

_「,據我所知...通過php循環你的值,並通過jquery設置值是設置下拉列表的唯一方法」_ - 當然事實並非如此。 PHP完全能夠生成必要的HTML輸出來創建一個選擇字段,如果需要,可以預先選擇某些選項。 – CBroe

回答

0

爲了回答最初的問題,你需要decode the entities呼應件事:

$("<? echo $key; ?>").val("<? echo(html_entity_decode($val)); ?>"); 

至於是否做這樣是一個好主意,不,不是真的。當你輸出的形式,你可以直接在象輸入值設置如下:

<input type="text" name="foo" value="<?php echo(html_entity_decode($usermeta->foo)); ?>"> 

另一種選擇是JSON編碼您$usermeta並設定在腳本標記。然後讓javascript更新字段。

+0

但是當我解碼.val()中的實體;我必須使用單引號.val('<?php echo $ val;?>');如果我做了html_entity_decode()並且它將實體轉換回撇號,它將它視爲.val('mr o'grady');並且由於中間的單引號而中斷了。除非我失去了一些東西 –