簡體   English   中英

PHP htmlentities和htmlspecialchars打破了我的弦

[英]PHP htmlentities and htmlspecialchars are breaking my strings

我的應用程序中有一個description字段,如果我添加了這樣的引號:“它將破壞所有內容。 我在整個說明字段上都使用了htmlentities(),因此我嘗試了htmlspecialchars(),但它也壞了。

在下面的屏幕截圖中,我發送了字符串“我希望它能正常工作”,並引起關注

這是通過htmlentities運行后我的字符串的樣子 這是通過htmlentities運行后我的字符串的樣子

我過去曾遇到過此問題,但不確定如何解決。

我通過更改代碼來解決了這個問題

$text = htmlentities( $text, ENT_QUOTES );

至:

$text = htmlentities( $text, ENT_QUOTES, 'utf-8' );

這很奇怪,因為PHP將默認設置列為utf-8。

如果只需要替換某些字符,我有時會創建一個簡單的查找和替換腳本。

<?php
  $bad = array('’', '&'); // add whatever you don't want here
  $good = array('&rsquo;', '&amp;'); // replace it here
  $description_field = str_replace($bad, $good, $description_field);
?>

我很確定htmlentitieshtmlspecialchars不是UTF-8安全函數。 他們將Unicode字符的第一個字節視為要編碼的HTML實體,然后當瀏覽器讀取所謂的UTF-8內容時,它會看到一個HTML實體,后跟兩個無效字節。

您可能需要研究mb_ereg_replace功能並手動替換不安全的字符:

$output = mb_ereg_replace("/</","&lt;",$input);

這就是使字符串成為HTML安全字符串所真正需要的。 我似乎找不到一個多字節安全的str_replace ,但這也可以正常工作,它將確保您永遠不會遇到UTF-8字符的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM