php htmlentities 將特殊字串轉換為HTML字串

輸入字串的時候有時候會輸入特殊字串,這時候只好進行字串的傳換,
如果是要存進DB裡面,可以透過mysqli_real_escape_string(); 將次串進行轉換。
而PHP內建的字串轉換函數為 htmlentities($test );
根據htmlentities的說明,htmlentities包含了以下四個參數
string htmlentities ( string $string
[, int $flags = ENT_COMPAT | ENT_HTML401
[, string $encoding = ini_get(“default_charset”)
[, bool $double_encode = true ]]] )

需要注意第二個參數flags(可察看下表),如果未設定flags時,
預設為ENT_COMPAT,會轉換雙引號,不轉換單引號, 需要特別注意

有效 flags 標記常量
常量名 描述
ENT_COMPAT 會轉換雙引號,不轉換單引號。
ENT_QUOTES 既轉換雙引號也轉換單引號。
ENT_NOQUOTES 單/雙引號都不轉換
ENT_IGNORE 靜默丟棄無效的代碼單元序列,而不是返回空字串。 不建議使用此標記, 因為它可能有安全影響。
ENT_SUBSTITUTE 替換無效的代碼單元序列為 Unicode 代替符(Replacement Character), U+FFFD (UTF-8) 或者 � (其他),而不是返回空字串。
ENT_DISALLOWED 為文檔的無效代碼點替換為 Unicode 代替符(Replacement Character): U+FFFD (UTF-8),或 �(其他),而不是把它們留在原處。 比如以下情況下就很有用:要保證 XML 文檔嵌入額外內容時格式合法。
ENT_HTML401 以 HTML 4.01 處理代碼。
ENT_XML1 以 XML 1 處理代碼。
ENT_XHTML 以 XHTML 處理代碼。
ENT_HTML5 以 HTML 5 處理代碼。

節錄自 http://php.net/manual/zh/function.htmlentities.php

Sublime text 3 使用 SublimeLinter 檢查 Javascript, HTML, CSS, php, js等語法錯誤

入門容易,專精難,這時候就需要好用的工具了
目前是看到Sublime text 3 外接套件工具很好用
不過有些使用者推薦VS code這套軟體
我個人覺得VS code的缺點是軟體太龐大,有點耗資源
但是VS code有PHP,tml,js等程式錯誤檢測
以及SQL偵錯編譯等(這部分還沒有研究,找時間要再研究一下)
而,相對於Sublime text 3 的而言
我覺得最大的優點在於Sublime text 3 可以協助填寫字串
以及可以自動偵錯物件function,而可以透過外掛工具來達到
此篇就是來介紹 SublimeLinter 程式碼檢測工具,以下是安裝外掛工具方式

步驟1,首先把Sublime 的Package Control 的套件下載到電腦上,讓後續的安裝可以快速一點

連結 https://packagecontrol.io/installation  這個網站清楚明瞭的介紹怎麼安裝
使用快捷鍵ctrl+`(或者View → Show Console)開啟Sublime 下方的console輸入小框,可以自行條整高度。
再根據你的Sublime text的版本,輸入相對應的程式碼!!
接著系統會去下載檔案,等到執行完成就好了。

步驟2,安裝Sublime​Linter 3,其實這個Sublime​Linter 3是一個框架而已,以這個框架下面,後續再進行Javascript, HTML, CSS 檢測外掛的安裝。

使用快速鍵ctrl+shift+p(或者 Preferencesn → Package Control )開啟上方的輸入列(Package Control ),
然後輸入 Install Package ,會自動Loading步驟1載入的資料,
此時可以進行步驟3。

步驟3,安裝node.js,蝦米,怎麼跟node.js有關係,其實是因為Sublime​Linter 3是透過node.js進行套件的安裝與運行的,因此需要node.js的環境。

連結 https://nodejs.org/en/ ,node.js相對的簡單,這裡就不囉嗦的,直接跳過。

步驟4,安裝node.js之後,就可以來安裝主角了。

安裝Javascript
與步驟1一樣呼叫 Package Control: Install Package,再輸入 Sublime​Linter-jshint 按確認即可安裝,請務必用輸入的方式,用複製貼上的方式可能會找不到字串。
安裝完成後,需要再透過Windows的命令列輸入 npm install -g jshint,才算完成。

安裝Css 
Sublime​Linter-csslint ,同樣在Sublime安裝完後,在Windows的命令列輸入:npm install -g csslint

安裝HTML
Sublime​Linter-htmlhint ,同樣在Sublime安裝完後,在Windows的命令列輸入:npm install -g htmlhint

安裝PHP
Sublime​Linter-php,同樣在Sublime安裝完後,在Windows的命令列輸入:npm install -g php

PHP雖然可以順利安裝,但是中間也些小問題,無法進行PHP的偵錯,還在尋找解決問題的方法,後續待補上

php json 矩陣轉換問題與json_encode的參數設定

json_encode轉換之後,原本的array的KEY為數字不見了,矩陣的索引不見了好像不是一件好事情。如果KEY為文字,轉換過程後KEY被保留下來了。
json_encode的參數JSON_FORCE_OBJECT,可以保留KEY的數字

什麼是 JSON ?json_encode的參數設定
根據維基百科的說明,是一種由道格拉斯·克羅克福特構想設計、輕量級的資料交換語言,以文字為基礎,且易於讓人閱讀。儘管JSON是Javascript的一個子集,但JSON是獨立於語言的文字格式,並且採用了類似於C語言家族的一些習慣。
你可以透過特定的格式去儲存任何資料(字串,數字,陣列,物件),也可以透過物件或陣列來傳送較複雜的資料。一旦建立了您的 JSON 資料,就可以非常簡單的跟其他程式溝通或交換資料,因為 JSON 就只是純文字個格式。
如果傳送的中文或者非英文的文字,會將文字經過轉換為unicode,不過不用擔心,雖然無法直接辨識,但是程式會自動轉換為文字,不用擔心。

回歸正題,到底要怎麼設定才能達到PHP的json_encode設定呢?用以下的矩陣來說明

Array
(
    [0] => Array
        (
            [id] => 1
            [a] => 1 
            [str] => 1
        )
    [1] => Array
        (
            [id] => 2
            [a] => 2
            [str] => 2
        )
)

其中array的KEY為數字,id為數字,a為數字,str為文字!!!!!不可能吧,str看起來為數字,怎麼會是文字呢!?不過這個是由PHP輸出的,尚未辨識為文字或數字那我們來試試看傳換為JSON字串。

json_encode($array)進行轉換,   [{“id”:”1″,”a”:”1″,”str”:”1″},{“id”:”2″,”a”:”2″,”str”:”2″}]
奇怪哩,原本的array的KEY為數字不見了,矩陣的索引不見了好像不是一件好事情
如果KEY為文字,轉換過程中就沒會有所損失如json_encode( array( “s”=>1,”ss”=>1.1,”sss”=>2 )),轉換為{“s”:1,”ss”:1.1,”sss”:2}
於上PHP網站查看,原來PHP 5.3.0以後增加了兩個參數可以設定,其中$options的問題比較大,可以設定轉換的小細節

string json_encode ( mixed $value [, int $options = 0 [, int $depth = 512 ]] )
$options參數設定
JSON_NUMERIC_CHECK  =>Encodes numeric strings as numbers.
JSON_PRETTY_PRINT  =>Use whitespace in returned data to format it. Available since PHP 5.4.0.
JSON_UNESCAPED_SLASHES  =>Don’t escape /. Available since PHP 5.4.0.
JSON_FORCE_OBJECT  =>Outputs an object rather than an array when a non-associative array is used. Especially useful when the recipient of the output is expecting an object and the array is empty. Available since PHP 5.3.0.
JSON_PRESERVE_ZERO_FRACTION  =>Ensures that float values are always encoded as a float value.
JSON_UNESCAPED_UNICODE  =>Encode multibyte Unicode characters literally (default is to escape as \uXXXX). Available since PHP 5.4.0.
JSON_PARTIAL_OUTPUT_ON_ERROR  =>Substitute some unencodable values instead of failing. Available since PHP 5.5.0.

知道這個設定之後,來測試一下結果會如何呢?
JSON_NUMERIC_CHECK => [{“id”:1,”a”:1,”str”:1},{“id”:2,”a”:2,”str”:2}],全部的數字自動轉換為數字模式,但是KEY還是沒有回來
JSON_FORCE_OBJECT=>{“0”:{“id”:”1″,”a”:”1″,”str”:”1″},”1″:{“id”:”2″,”a”:”2″,”str”:”2″}},KEY回來了

WordPress修改style.css後沒反應的問題

初步觀察,css的檔名會自動產生?ver=4.7.5的字串

<link rel="stylesheet" id="style-css" href="../style.min.css?ver=4.7.5" type="text/css" media="all">

這個字串應該是wordpress的版本字串,好像沒有多大用處。
當覽器檢查到需要載入這個CSS時,會先檢查電腦的暫存檔內是否有這個檔案以及是否已經過期,如果還在期限內,就直接抓取遊覽器的暫存檔案,因此不管你怎麼修改style.css,在還沒有過期之前,遊覽器都不會去抓取新檔案,因此看起來就像沒有修改style.css的狀況
(印象中,之前只要使用Chrome選重新載入的方式可以重新載入一次style.css,最近發現這個功能沒了)。
知道這個原因之後,原本是想要採用style.css?time的方式,讓使用者每次都讀取新的CSS檔案,但是這種方法有一個大缺點,上線前於自己的電腦上很好用,但是上線後,伺服器的流量可能會突飛猛進,需要手動修改這個問題,有點麻煩
只好去拜Google大神,很外就找到了以下的解法。
<link href=”for_css/style.css?<?php echo filemtime(‘for_css/style.css’); ?>” rel=”stylesheet” type=”text/css” />
系統直接去搜尋CSS檔案的修改時間,當成檔名,這樣可以解決伺服器的流量可能會突飛猛進的問題。而WP比較麻煩一點,但是按照以下方法也是可以達到功能:
在functions.php 內加入以下程式碼後,就順利的解決了。

add_action( 'wp_enqueue_scripts', 'enqueue_child_theme_styles', PHP_INT_MAX);
function enqueue_child_theme_styles() {
wp_enqueue_style( 'parent-style',get_template_directory_uri().'/style.css' );
wp_enqueue_style( 'child-style', get_stylesheet_uri(), NULL,
filemtime( get_stylesheet_directory() . '/style.css' ) );
}

轉載自 https://www.techmarks.com/wp-theme-version/