123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- // Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
- //
- // This Source Code Form is subject to the terms of the MIT License.
- // If a copy of the MIT was not distributed with this file,
- // You can obtain one at https://github.com/gogf/gf.
- // Package ghtml provides useful API for HTML content handling.
- package ghtml
- import (
- "html"
- "reflect"
- "strings"
- strip "github.com/grokify/html-strip-tags-go"
- )
- // StripTags strips HTML tags from content, and returns only text.
- // Referer: http://php.net/manual/zh/function.strip-tags.php
- func StripTags(s string) string {
- return strip.StripTags(s)
- }
- // Entities encodes all HTML chars for content.
- // Referer: http://php.net/manual/zh/function.htmlentities.php
- func Entities(s string) string {
- return html.EscapeString(s)
- }
- // EntitiesDecode decodes all HTML chars for content.
- // Referer: http://php.net/manual/zh/function.html-entity-decode.php
- func EntitiesDecode(s string) string {
- return html.UnescapeString(s)
- }
- // SpecialChars encodes some special chars for content, these special chars are:
- // "&", "<", ">", `"`, "'".
- // Referer: http://php.net/manual/zh/function.htmlspecialchars.php
- func SpecialChars(s string) string {
- return strings.NewReplacer(
- "&", "&",
- "<", "<",
- ">", ">",
- `"`, """,
- "'", "'",
- ).Replace(s)
- }
- // SpecialCharsDecode decodes some special chars for content, these special chars are:
- // "&", "<", ">", `"`, "'".
- // Referer: http://php.net/manual/zh/function.htmlspecialchars-decode.php
- func SpecialCharsDecode(s string) string {
- return strings.NewReplacer(
- "&", "&",
- "<", "<",
- ">", ">",
- """, `"`,
- "'", "'",
- ).Replace(s)
- }
- // SpecialCharsMapOrStruct automatically encodes string values/attributes for map/struct.
- func SpecialCharsMapOrStruct(mapOrStruct interface{}) error {
- var (
- reflectValue = reflect.ValueOf(mapOrStruct)
- reflectKind = reflectValue.Kind()
- )
- for reflectValue.IsValid() && (reflectKind == reflect.Ptr || reflectKind == reflect.Interface) {
- reflectValue = reflectValue.Elem()
- reflectKind = reflectValue.Kind()
- }
- switch reflectKind {
- case reflect.Map:
- var (
- mapKeys = reflectValue.MapKeys()
- mapValue reflect.Value
- )
- for _, key := range mapKeys {
- mapValue = reflectValue.MapIndex(key)
- switch mapValue.Kind() {
- case reflect.String:
- reflectValue.SetMapIndex(key, reflect.ValueOf(SpecialChars(mapValue.String())))
- case reflect.Interface:
- if mapValue.Elem().Kind() == reflect.String {
- reflectValue.SetMapIndex(key, reflect.ValueOf(SpecialChars(mapValue.Elem().String())))
- }
- }
- }
- case reflect.Struct:
- var (
- fieldValue reflect.Value
- )
- for i := 0; i < reflectValue.NumField(); i++ {
- fieldValue = reflectValue.Field(i)
- switch fieldValue.Kind() {
- case reflect.String:
- fieldValue.Set(reflect.ValueOf(SpecialChars(fieldValue.String())))
- }
- }
- }
- return nil
- }
|